我将应用程序从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。改用宽字符串。 –