用 UIWebView 顯示中文文字檔案的若干問題

2021-08-27 15:01:12 字數 1331 閱讀 8777

nsstring

* path=[[

nsbundle

mainbundle

]pathforresource

:@"48_1"

oftype

:@".txt"];

nsurl

* url=[

nsurl

fileurlwithpath

:path]; if

(url)

[_webview

loadrequest

:[nsurlrequest

requestwithurl

:url]];

很不幸,對於中文,uiwebview支援得並不是很好:

48_1.txt 檔案中包含了中文,我們不知道它是什麼編碼,可能是 utf8,也可能是 gbk 或 gb18030 。我們可以通過stringwithcontentsoffile 方法推斷它的編碼:

nsstringencoding

* usedencoding =

nil;

intencoding; //

帶bom

頭的如utf-8

等這裡會識別

nsstring

*body = [

nsstring

stringwithcontentsoffile

:path

usedencoding

:usedencoding

error

:nil];

if(!body) if

(!body)

然後將它們裝換為 utf16 編碼並儲存到新的檔案中:

if(body)

else

注意,pathfortemporaryfile 函式是我們自定義的。它實際上將檔案指向了「沙盒」的 temp 資料夾。

這樣,uiwebview 就能正確顯示中文了:

但不知道為什麼,uiwebview 在顯示文字檔案時,會將檔案末尾的若干位元組顯示為方塊。這些方塊實際上是一些「\0」字元。當我用「文字編輯器」或textmate 等程式開啟 48_1.txt 檔案時,這些「\0」字元都不會顯示在螢幕上。但在 uiwebview 中,它們卻被顯示為方塊。因此可以在儲存檔案前加上以下**:

nsstring

* findstr=

@"\0";

nsrange

range=[body

rangeofstring

:findstr]; if

(range.

location

!=nsnotfound)

這樣,你就可以把那些方塊除掉。

Linux 系統中文檔案顯示亂碼

linux中文顯示亂碼 1 檢視系統是否安裝中文語言包 說明已經安裝了 2 xshell 的編碼設定成utf 8 3 修改配置檔案 etc sysconfig i18n lang zh cn.utf 8 language zh cn.utf 8 zh cn supported zh cn.utf 8...

用the excerpt處理中文文章字數限制的方法

wordpress技巧 2011年12月27日 era 6,509 views 2 replies wordpress處理the excerpt的 你可以在wp includes目錄下的formatting.php中找到,通過 你可發現the excerpt是用空格來計算長度的,這對英文是可以的,但...

CentOS 下中文檔名顯示亂碼

在windows上使用ftp上傳檔案到linux上,中文名稱在linux系統中顯示為亂碼。雖然將linux的env設定了lang en us.utf 8,並且本地的shell客戶端編碼也設定成utf 8,但在shell中 或通過http訪問 仍是亂碼 原因在於,windows 的檔名中文編碼預設為g...