我將應用程序從Windows移植到Linux,並且遇到了字符編碼的問題:我看到重音字母(例如'é''à')被認爲是wchar_t
(4個字節,帶有g ++),而在Visual Studio中, 1個字節(char)。我的單元測試失敗了,因爲在我的代碼中我使用重音字母進行字符比較(如在Linux中它們是多字節)。如何將重音字母(wchar_t)轉換爲char?
是否可以在Linux中將重音字母(如'û')轉換爲Windows編碼(1字節),還是應該重構我的代碼並使用std::wstring
代替?
'wchar_t'在Windows上是2個字節(UTF-16),在其他系統上是4個字節(UTF-32)。如果數據確實使用1個字節的字符,那麼它使用'char'來代替,因此需要處理字符集代碼頁。要將其移植到Linux,您應該將數據重新編碼爲UTF編碼(8,16或32),然後使用便攜式Unicode比較。 –
法語重音字母大小是我的Windows系統上的一個字節(char),這就是爲什麼在我的代碼中我可以在字符比較中使用它們(例如if(strMystring [i] =='é')...)Linux文本編輯器與原始編碼混淆,現在我的單元測試失敗了,所以我有義務找到合適的便攜式解決方案。 – Aminos
'如果(strMystring [i] =='é')'只有在'strMystring'是一個拉丁編碼的8位字符串並且源文件本身以拉丁編碼匹配時才起作用。這不是一個非常便攜的設置。我絕對不建議使用窄字符串比較非ASCII數據,因爲這是特定於語言環境的,除非您使用的是UTF-8。改用寬字符串。 –