在Windows 上透過wstring 存取Unicode 資料
在Windows 上處理Unicode 文字時,出現的問題是如何有效率地讀取Unicode (UTF -8) 檔案寫入wstring(s)。幸運的是,C 11 透過 std::codecvt_utf8 Facet 提供了通用的解決方案。
codecvt_utf8 Facet 作為 UTF-8 位元組字串和 UCS2 或 UCS4 字串之間的橋樑,支援對兩種文字的讀寫操作和二進位 UTF-8 檔案。要利用此方面,建議建立一個封裝必要的 UTF-8 方面的區域設定物件。然後,此區域設定物件可用於注入流緩衝區,從而實現高效的 UTF-8 檔案處理。
以下程式碼片段示範如何使用此技術將UTF-8 檔案讀入wstring:
<code class="cpp">#include <sstream> #include <fstream> #include <codecvt> std::wstring readFile(const char* filename) { std::wifstream wif(filename); wif.imbue(std::locale(std::locale::empty(), new std::codecvt_utf8<wchar_t>)); std::wstringstream wss; wss << wif.rdbuf(); return wss.str(); }</code>
要使用此函數,只需將檔案名稱作為參數傳遞,並將返回的wstring 指派給變數:
<code class="cpp">std::wstring wstr = readFile("a.txt");</code>
或者,您可以將全域C 語言環境設定為UTF-8在處理字串流之前使用codecvt_utf8 方面。這確保了對std::locale 預設建構函數的呼叫將返回充滿所需編解碼器的全域C 語言環境:
<code class="cpp">std::locale::global(std::locale(std::locale::empty(), new std::codecvt_utf8<wchar_t>));</code>
使用此全域設置,而無需使用語言環境明確地註入流緩衝區,簡化C 程式碼中處理UTF-8 檔案的過程。
以上是如何在 Windows 上有效率地將 UTF-8 檔案讀取為 wstring?的詳細內容。更多資訊請關注PHP中文網其他相關文章!