更新:

更新:

我們知道有一個名為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 的複選框

Beta:使用 Unicode UTF-8 提供全球語言支持

也可以看看

也就是說,目前的支援仍然存在問題


更新:

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 作業系統,僅支援靜態連結。

UTF-8 支持

答案2

根據我讀到的有關微軟的信息維基百科上的 AppLocale 工具,該工具無法將您的代碼頁變更為 UTF-8。它僅適用於非 Unicode 應用程式,但 UTF-8 是 Unicode 標準的一部分。

在幕後,非ASCII 字元的Unicode 處理與非Unicode 字元有很大不同,因此雖然可以在非Unicode 代碼頁之間進行更改(這就是AppLocale 所做的),但不可能在Unicode 和非Unicode 之間進行更改。

答案3

在此提一下:在 Windows 10 17133 中,現在有一個使用 UTF-8 進行全球支援的測試版選項。但到目前為止,它對我來說對非 Unicode 程式沒有幫助,但它被放置在彈出視窗中,我可以在其中更改非 Unicode 程式的區域設定。

因此,也許他們正在研究一些東西來結束必須更改非 Unicode 程式的區域設定的必要性。

相關內容