繁体   English   中英

wstring字符是Unicode吗? 转换期间会发生什么?

[英]Is wstring character is Unicode ? What happens during conversion?

最近,我遇到了UTF-8编码到字符串反之亦然的转换。 我知道UTF-8编码用于保存世界上几乎所有字符,而使用内置于字符串数据类型的char只能存储ASCII值。对于UTF-8编码的字符,所需字节数内存中的字节从1字节到4字节不等,但对于“字符”类型,通常为1字节。

我的问题是从wstring转换为string或从wchar转换为char会发生什么? 是否会跳过需要多个字节的字符? 看来这取决于实现,但是我想知道正确的方法是什么。

还需要wchar来存储unicode字符吗? 据我了解,UNICODE字符也可以存储在普通字符串中。 为什么要使用wstring或wchar?

取决于您如何转换它们。
您需要指定源编码类型和目标编码类型。
wstring不是一种格式,它只是定义一种数据类型。

现在通常当人们说“ Unicode”时,它的意思是Microsoft Windows使用的UTF16 ,通常就是wstring包含的内容。

因此,从UTF8转换为UTF16的正确方法是:

     std::string utf8String = "blah blah";

     std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> convert;
     std::wstring utf16String = convert.from_bytes( utf8String );

反过来:

     std::wstring utf16String = "blah blah";

     std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> convert;
     std::string utf16String = convert.to_bytes( utf16String );

并增加混乱:
Windows平台上使用std::string时(例如使用多字节编译时),它不是UTF8 他们使用ANSI
更具体地说,是Windows使用的默认编码语言。

使用Unicode编译时,Windows API命令应采用以下格式:

命令A- 多字节 ANSI
命令W - Unicode - UTF16

使源文件采用UTF-8编码,然后在IDE中将字符编码设置为UNICODE。
使用std :: string并扩展它们的WindowsAPI调用。
std::string somestring = "こんにちは"; WindowsApiW(widen(somestring).c_str());
我知道这听起来有些hacker ,但是可以在utf8everywhere.org上找到关于此问题的更深刻的解释。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM