簡體   English   中英

如何在 C++ 的用戶首選語言環境中正確顯示字符串?

[英]How to correctly display strings in user preferred locale in C++?

我在另一個問題中發布了這段代碼:

 auto operator<<(std::ostream& out, const std::u8string_view str) -> std::ostream& { std::locale::global(std::locale{".utf8"}); auto& ret = out << std::string_view{std::bit_cast<const char*>(str.data()), str.size()}; std::locale::global(std::locale{""}); return ret; }

我打算在打印前將u8string轉換為用戶首選的語言環境。 但是在對該帖子的回答中,@Chronial 指出我錯誤地使用了global語言環境。

我認為 outstreams 解釋global編碼中的數據,並在寫入時將其轉換為imbue的編碼。 因此,由於我提供的數據是utf8格式並且我想在用戶首選的語言環境中顯示它,所以我更改了global並且沒有在上面的代碼中觸及imbue

例如:如果我的終端正在使用EBCDIC並且我的應用程序中有ASCII字符串,正確顯示它們的正確程序是什么? 直接顯示它們會產生亂碼,AFAIK。

我的想法是,如果我將global設置為ASCII並注入EBCDIC ,這將使imbue將數據解釋為ASCII並在打印前將其轉換為EBCDIC

上面的ASCIIEBCDIC的場景只是作為一個例子。 我正在尋找一個通用的解決方案,而不僅僅是針對ASCIIEBCDIC的情況。

C++ 標准庫並不是真正為在這種情況下幫助您而設計的。 您要么必須自己處理重新編碼,要么使用寬字符流。 然后你將把你的字符串解碼成寬字符串,將它們寫入 stream,然后 stream 將使用它所包含的語言環境/編碼來重新編碼字符串。

但是你寫的是什么應用程序,這對你來說真的很重要嗎? 對於大多數應用程序來說,只寫 UTF8 應該沒問題,因為這是所有現代終端都應該配置的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM