Explorar o código

feat: 补充本地书缺少的候选编码 UTF-16BE

HapeLee hai 4 meses
pai
achega
9392b58673

+ 1 - 1
app/src/main/java/io/legado/app/constant/AppConst.kt

@@ -88,7 +88,7 @@ object AppConst {
     private val isBeta = sha256Signature == BETA_SIGNATURE || BuildConfig.DEBUG
 
     val charsets =
-        arrayListOf("UTF-8", "GB2312", "GB18030", "GBK", "Unicode", "UTF-16", "UTF-16LE", "ASCII")
+        arrayListOf("UTF-8", "GB2312", "GB18030", "GBK", "Unicode", "UTF-16", "UTF-16LE", "UTF-16BE", "ASCII")
 
     @Keep
     data class AppInfo(

+ 5 - 0
app/src/main/java/io/legado/app/model/ReadBook.kt

@@ -16,6 +16,7 @@ import io.legado.app.help.book.BookHelp
 import io.legado.app.help.book.ContentProcessor
 import io.legado.app.help.book.isImage
 import io.legado.app.help.book.isLocal
+import io.legado.app.help.book.isLocalTxt
 import io.legado.app.help.book.isPdf
 import io.legado.app.help.book.isSameNameAuthor
 import io.legado.app.help.book.readSimulating
@@ -1107,6 +1108,10 @@ object ReadBook : CoroutineScope by MainScope(), KoinComponent {
     fun setCharset(charset: String) {
         book?.let {
             it.charset = charset
+            if (it.isLocalTxt) {
+                TextFile.clear()
+                clearTextChapter()
+            }
             callBack?.loadChapterList(it)
         }
         saveRead()

+ 7 - 1
app/src/main/java/io/legado/app/model/localBook/TextFile.kt

@@ -72,11 +72,16 @@ class TextFile(private var book: Book) {
     private var bufferStart = -1L
     private var bufferEnd = -1L
 
+    private fun refreshCharset() {
+        charset = book.fileCharset()
+    }
+
     /**
      * 获取目录
      */
     @Throws(FileNotFoundException::class, SecurityException::class, EmptyFileException::class)
     fun getChapterList(): ArrayList<BookChapter> {
+        refreshCharset()
         val modified = book.isLocalModified()
         if (book.charset == null || book.tocUrl.isBlank() || modified) {
             LocalBook.getBookInputStream(book).use { bis ->
@@ -105,6 +110,7 @@ class TextFile(private var book: Book) {
     }
 
     fun getContent(chapter: BookChapter): String {
+        refreshCharset()
         val start = chapter.start!!
         val end = chapter.end!!
         if (txtBuffer == null || start > bufferEnd || end < bufferStart) {
@@ -478,4 +484,4 @@ class TextFile(private var book: Book) {
         return rules
     }
 
-}
+}