我們知道有一個名為AppLocale的應用程序,它可以更改非Unicode應用程式的代碼頁,以解決文字顯示問題。
但有一個程序,其右側顯示代碼頁是UTF-8,這意味著其文字應顯示為 UTF-8,而是 Windows將其顯示為本機代碼頁並使文字不可讀。這看起來很有趣,因為幾乎所有國家和地區都有,但沒有UTF-8。我認為這是一個錯誤,因為程式設計師可能使用英語而忽略測試非英語文字顯示問題。我不認為製片人會修復它,我想自己修復它。
是否可以使用 AppLocale 等軟體將非 Unicode 輸出設定為 UTF-8?預設非 Unicode 輸出是本機代碼頁嗎?如何將本機代碼頁設定為 UTF-8?
答案1
以前這是不可能的,因為
微軟聲稱 UTF-8 語言環境可能會破壞某些函數(一個可能的例子是
_mbsrev
),因為它們被編寫為假設每個字元使用的多字節編碼不超過2 個字節,因此到目前為止具有更多位元組的代碼頁,例如GB 18030 (cp54936) 和無法將 UTF-8 設定為區域設定。https://en.wikipedia.org/wiki/Unicode_in_Microsoft_Windows#UTF-8
然而有一個“測試版:使用 Unicode UTF-8 提供全球語言支援”自 Windows 10 insider build 17035 以來用於將區域設定代碼頁設定為 UTF-8 的複選框
也可以看看
也就是說,目前的支援仍然存在問題
- 使用 UTF-8 作為預設代碼頁時 Windows 10 1803 中的凍結問題
- 當 Windows 10 中的 unicode beta 支援開啟時,加載項無法安裝
- Windows 中對單字節字元集的 UTF-8 支援處於測試階段,可能會破壞許多未預料到的應用程式
- MSVC 中出現內部錯誤,建置失敗
更新:
Microsoft 還添加了程式使用 UTF-8 語言環境的功能,甚至無需設定上面的 UTF-8 beta 標誌。您可以使用/execution-charset:utf-8
或者/utf-8
使用 MSVC 編譯時的選項或在 appxmanifest 中設定 ActiveCodePage 屬性
您也可以透過連結適當的 C 運行時在舊版 Windows 中使用 UTF-8 區域設置
從 Windows 10 內部版本 17134(2018 年 4 月更新)開始,通用 C 執行時間支援使用 UTF-8 代碼頁。這意味著
char
傳遞給 C 運行時函數的字串將需要 UTF-8 編碼的字串。若要啟用 UTF-8 模式,請在使用 時使用「UTF-8」作為代碼頁setlocale
。例如,setlocale(LC_ALL, ".utf8")
將使用目前預設的 Windows ANSI 代碼頁 (ACP) 作為區域設置,並使用 UTF-8 作為代碼頁。…
要在 Windows 10 之前的作業系統(例如 Windows 7)上使用此功能,您必須使用應用程式本地部署或使用 Windows SDK 版本 17134 或更高版本進行靜態連結。對於 17134 之前的 Windows 10 作業系統,僅支援靜態連結。
答案2
根據我讀到的有關微軟的信息維基百科上的 AppLocale 工具,該工具無法將您的代碼頁變更為 UTF-8。它僅適用於非 Unicode 應用程式,但 UTF-8 是 Unicode 標準的一部分。
在幕後,非ASCII 字元的Unicode 處理與非Unicode 字元有很大不同,因此雖然可以在非Unicode 代碼頁之間進行更改(這就是AppLocale 所做的),但不可能在Unicode 和非Unicode 之間進行更改。
答案3
在此提一下:在 Windows 10 17133 中,現在有一個使用 UTF-8 進行全球支援的測試版選項。但到目前為止,它對我來說對非 Unicode 程式沒有幫助,但它被放置在彈出視窗中,我可以在其中更改非 Unicode 程式的區域設定。
因此,也許他們正在研究一些東西來結束必須更改非 Unicode 程式的區域設定的必要性。