在Windows中,öCP437字符集中的Unicode字符(带小写字母的拉丁文小写字母o)的值为148。
在Linux中,öUTF-8编码的字节值是:
-61(Hi Byte)
-74(Lo Byte)
(unsigned value = 46787)
Run Code Online (Sandbox Code Playgroud)
我的问题是,如何148在Linux上的C ++中从CP437 转换为UTF-8?
我的问题的详细信息位于:
在Windows上,可以使用Win32 MultiByteToWideChar()函数将数据从CP437转换为UTF-16,然后使用该WideCharToMultiByte()函数将数据从UTF-16转换为UTF-8。
在Linux上,您可以使用Unicode转换库,例如libiconv或ICU(也可用于Windows)。
在C ++ 11和更高版本中,您可以使用std::wstring_convert:
从CP437转换为UTF-16或UTF-32 / UCS-4(如果可以codecvt为CP437 获取/制作一个)。
然后,将其从UTF-16或UTF-32 / UCS-4转换为UTF-8。
您不能用于codecvt_utf8直接从CP437转换为UTF-8。它仅支持以下之间的转换:
UTF-8和UCS-2(不是UTF-16!)
UTF-8和UTF-32 / UCS-4。
您必须使用codecvt_utf8_utf16UTF-8和UTF-16之间的转换。
或者,您可以使用mbrtoc16()CP437语言环境将CP437转换为UTF-16,然后使用c16rtomb()UTF-8语言环境用于将UTF-16转换为UTF-8(如果您的STL库实现了DR488的修复程序,否则c16rtomb()仅支持UCS -2,而不是UTF-16!)。
否则,只需为256个可能的CP437字节创建自己的CP437到UTF8查找表,然后手动进行转换,一次转换一个字节。
| 归档时间: |
|
| 查看次数: |
1340 次 |
| 最近记录: |