文字閱讀的功能實現

2021-06-03 05:52:46 字數 1167 閱讀 8988

由於硬體的限制導致不可能一次性將txt文件全部都讀取出來。需要一段一段將其讀取出來。現設定每次讀取的大小為filesize。而txt文件中會是ascii碼和gb2312碼的集合。ascii碼占用乙個位元組,而gb2312占用兩個位元組。每次讀取filesize大小的內容時,可能會導致將乙個gb2312的字元分成兩半。而此一次讀取時,導致第乙個字元將是不可預定的內容。

a我是程式設計師。b我也是程式設計師

假設以上是文字內容,filesize大小為8, 那麼第一次讀取檔案時,會在「序」的高位元組結束,第二次讀取的時候會從「序」的低位元組開始,顯然第乙個字元將不是我們想要的字元,它由「序」的低位元組和「員」的高位元組組成。這樣再將gb2312轉換成unicode碼然後顯示時會出現亂碼的情況。

那麼該如何來處理這種情況呢。每次讀取一次文字檔案會將其轉換成unicode碼去顯示,在轉換的過程中,當最後乙個字元不是完整的乙個字是(或是ascii碼,或是gb2312碼,漢字區的「高位位元組」的範圍是0xb0-0xf7,「低位位元組」的範圍是0xa1-0xfe

)。可以設定乙個標誌,這個標誌可以指示下一次讀取檔案時是否要將位置提前乙個位元組(相應filesize要+1)。這樣就可以解決亂碼的問題。

上面是說明如何讀取文字,使得顯示時不產生亂碼。下面將介紹如何使之內容不產生跳躍。

為了內容能夠平滑的顯示出來,我們需要將當前顯示的一部分內容和新讀取的內容進行連線。假設我們顯示的內容儲存在buf_show【】中,新讀取的內容在buf_read【】中,因此我們可以將buf_show【】未顯示完的內容與buf_read進行連線,然後儲存到buf_show中。這樣我們在使用者閱讀的時候就將buf_show中的內容給替換了。這個替換的時機如何把握。

這裡是已經顯示的內容

……這裡是顯示中的內容

……這裡是未顯示的容(一行)

這時應該是最合適的時機,因為最後一行可能未填充完整。所以當還剩一行的時候就重新讀取文字進行連線。

翻頁功能實現方法相差不大。

當往回翻頁翻行時該怎麼辦呢,如果仍按向下的實現思想,是不好處理的。

我們可以建立乙個重新閱讀位置的索引。

typedef struct

showindex;

我們總共需要的索引數 = 檔案大小/filesize +1,然後進行malloc。建立索引控制項。

向下閱讀時記錄 讀取檔案的位置。那麼往回是就知道該從什麼位置開始讀取,而且不會截斷漢字。

python 實現文字自動翻譯功能

在程式設計生活中,有的時候我們需要實現翻譯功能。如我們訓練的是中文句子,我們需要將結果變成英文。usr bin env python3 coding utf 8 author yudengwu 余登武 date 2020 9 14 email 1344732766 qq.com from trans...

Unity Text 實現文字上下標功能

可修改上下標顏色以及大小 說明 using system.collections.generic using system.text using system.text.regularexpressions using unityengine using unityengine.ui namespa...

C 文字閱讀

using system.speech.synthesis 語音類庫 using system.collections.generic 陣列集合類庫 speechsynthesizer spvoice new speechsynthesizer 語音類 spvoice.rate 1 使用 spvoi...