本文講的是解決uwp文字gbk開啟亂碼錯誤,如何去讀取gbk,包括網頁gbk。最後本文給出乙個方法追加文字。
我使用notepad記事本儲存檔案,格式ascii,用微軟示例開啟檔案方式讀取,出現錯誤
在多位元組的目標**頁中,沒有此 unicode 字元可以對映到的字元
這個問題看來很簡單,不就是編碼錯誤,可以我就弄了一晚上
我先換個說法,讓大家容易搜尋到
其實不知道垃圾wr怎麼想,現在沒法讀ascii,官方給的,直接錯
用了nos大神的**也是報錯
用了我csdn部落格置頂**,就直接亂碼 所有中文代為 「?」
查了一下wpf使用預設可以讀,也就是我們儲存時gbk,查詢到encoding沒有gbk,沒有預設
於是我就在網上找,很久沒找到,但是找到寫到一半我就不想寫,好難
在網上看到encoding.getencoding(0)預設,於是我找了getencoding,原來有string,那麼encoding gbk = encoding.getencoding("gbk");
報錯『gbk』 is not a supported encoding name.
看來這個也不可以,我覺得我要寫個轉換
最後發現
//使用codepagesencodingprovider去註冊擴充套件編碼。
encoding.registerprovider(codepagesencodingprovider.instance);
//註冊gbk編碼
encoding encodinggbk =encoding.getencoding("gbk");
我們在讀取之前判斷我們的編碼,這個簡單可以使用
private
static encoding autoencoding(byte bom)
// analyze the bom
if (bom[0] == 0x2b && bom[1] == 0x2f && bom[2] == 0x76) return encoding.utf7;
if (bom[0] == 0xef && bom[1] == 0xbb && bom[2] == 0xbf) return encoding.utf8;
if (bom[0] == 0xff && bom[1] == 0xfe) return encoding.unicode; //utf-16le
if (bom[0] == 0xfe && bom[1] == 0xff) return encoding.bigendianunicode; //utf-16be
if (bom[0] == 0 && bom[1] == 0 && bom[2] == 0xfe && bom[3] == 0xff) return encoding.utf32;
return encoding.ascii;
}
這沒有gbk所以我們只好通過乙個垃圾方法。
用windows.storage.fileio.readtextasync如果錯誤了,就使用gbk讀,還錯誤,那麼就是檔案錯了。
編碼的錯報的argumentoutofrangeexception。我們可以catch,用gbk就是上面寫的。
全部**
private
async task read(storagefile file)
catch (argumentoutofrangeexception)
ibuffer buffer = await fileio.readbufferasync(file);
datareader reader = datareader.frombuffer(buffer);
byte filecontent = new
byte[reader.unconsumedbufferlength];
reader.readbytes(filecontent);
string text = "";
// encoding.ascii.getstring(filecontent, 0, filecontent.length);
//text= encoding.getencoding(0).getstring(filecontent, 0, filecontent.length);
encoding.registerprovider(codepagesencodingprovider.instance);
encoding gbk = encoding.getencoding("gbk");
text = gbk.getstring(filecontent);
//string text = autoencoding(new byte[4] ).getstring(filecontent);
return text;
}return str;
}private
static encoding autoencoding(byte bom)
// analyze the bom
if (bom[0] == 0x2b && bom[1] == 0x2f && bom[2] == 0x76) return encoding.utf7;
if (bom[0] == 0xef && bom[1] == 0xbb && bom[2] == 0xbf) return encoding.utf8;
if (bom[0] == 0xff && bom[1] == 0xfe) return encoding.unicode; //utf-16le
if (bom[0] == 0xfe && bom[1] == 0xff) return encoding.bigendianunicode; //utf-16be
if (bom[0] == 0 && bom[1] == 0 && bom[2] == 0xfe && bom[3] == 0xff) return encoding.utf32;
return encoding.ascii;
}
文字還有乙個坑,我們如何在文字追加?uwp追加文字其實換了類,在fileio。
win10 uwp 繫結密碼
win10 下,密碼框無法繫結到viewmodel,password是不可以繫結。我們可以自己使用簡單方法去繫結 我們之前在wpf 使用繫結密碼框,我寫了一篇,關於如何繫結,我提供乙個我自己試了可以的類。首先,我們新建乙個類,這個類是讓 passwordbox 可以繫結password。uwp讓 p...
win10 uwp 重啟軟體
在16299支援在軟體自己重啟,不需要讓使用者點選關閉然後啟動,雖然我還不知道這個有什麼用。本文告訴大家如何讓軟體關閉重新開啟 首先需要使用的版本是 16299 然後使用 requestrestartasync 方法就可以關閉軟體重新開啟。下面就是簡單的軟體 100 horizontalalignm...
win10 uwp 繫結密碼
win10 下,密碼框無法繫結到viewmodel,password是不可以繫結。我們可以自己使用簡單方法去繫結 我們之前在wpf 使用繫結密碼框,我寫了一篇,關於如何繫結,我提供乙個我自己試了可以的類。首先,我們新建乙個類,這個類是讓 passwordbox 可以繫結password。uwp讓 p...