如何将重音字母(wchar_t)转换为char?

时间:2016-12-19 22:33:26

标签: c++ unicode wchar-t

我将一个应用程序从Windows移植到Linux,我遇到了字符编码的问题:我看到重音字母(例如'é'''')被认为是wchar_t(4个字节带有g ++)而在Visual Studio,它们占用1个字节(char)。我的单元测试失败了,因为在我的代码中我使用重音字母进行字符比较(在Linux中它们是多字节的)。

是否可以在Linux中将重音字母(如'û')转换为Windows编码(1字节),还是应该重构我的代码并改为使用std::wstring

1 个答案:

答案 0 :(得分:1)

如果'é'可以存储在Windows上的一个字符上,那么您的应用程序可能是在没有UNICODE的情况下编译的,当然也是Win 1252编码。

在linux上使用通常的utf-8编码,'é' should require 2 characters。这应该引起编译器的警告。如果你使用获得的字符,它只代表编码的一部分,因此char by char比较将毫无意义。

如果您想保留算法,使用字符串中的单个字符,最好使用wchar_twstring(或事件更具可移植性:char32_t和{{1 }})。

如果您想了解更多有关字符编码和使用C ++的unicode的信息,我只能热烈推荐James McNellis提供的优秀视频tutorial on unicode with C++