win10 uwp 讀取文字GBK錯誤

2022-01-15 18:46:43 字數 3049 閱讀 9427

本文講的是解決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...