相关疑难解决方法(0)

C++:如何将ASCII或ANSI转换为UTF8并存储在std :: string中

我公司使用这样的代码:

    std::string(CT2CA(some_CString)).c_str()
Run Code Online (Sandbox Code Playgroud)

我认为它将Unicode字符串(其类型为CString)转换为ANSI编码,此字符串用于电子邮件的主题.但是,电子邮件的标题(包括主题)表示邮件客户端应将其解码为unicode(这是原始代码的作用).因此,一些像"äöü"这样的德国字母将无法正确显示为标题.

无论如何,我可以将此标头放回UTF8并存储到std :: string或const char*?

我知道有很多更聪明的方法可以做到这一点,但我需要保持代码坚持原来的(即将头部发送为std :: string或const char*).

提前致谢.

c++ cstring stdstring visual-studio-2010

3
推荐指数
1
解决办法
1万
查看次数

"Ü"的UTF编码返回3个字节​​而不是"真实"unicode

我正在玩下面提到的代码:https: //stackoverflow.com/a/21575607/2416394因为我在使用TinyXML编写正确的utf8 xml时遇到了问题.

好吧,我需要对"带有DIAERESIS的LATIN CAPITAL LETTER U"进行编码,这Ü要写入XML等.

以下是上述帖子中的代码:

std::string codepage_str = "Ü";
int size = MultiByteToWideChar( CP_ACP, MB_COMPOSITE, codepage_str.c_str(),
                                codepage_str.length(), nullptr, 0 );
std::wstring utf16_str( size, '\0' );
MultiByteToWideChar( CP_ACP, MB_COMPOSITE, codepage_str.c_str(),
                     codepage_str.length(), &utf16_str[ 0 ], size );

int utf8_size = WideCharToMultiByte( CP_UTF8, 0, utf16_str.c_str(),
                                     utf16_str.length(), nullptr, 0,
                                     nullptr, nullptr );
std::string utf8_str( utf8_size, '\0' );
WideCharToMultiByte( CP_UTF8, 0, utf16_str.c_str(),
                     utf16_str.length(), &utf8_str[ 0 ], utf8_size,
                     nullptr, nullptr );
Run Code Online (Sandbox Code Playgroud)

结果是一个std :: string,其大小为3,具有以下字节:

-       utf8_str    "Ü"   std::basic_string<char,std::char_traits<char>,std::allocator<char> …
Run Code Online (Sandbox Code Playgroud)

c++ unicode encoding utf-8

1
推荐指数
1
解决办法
618
查看次数

标签 统计

c++ ×2

cstring ×1

encoding ×1

stdstring ×1

unicode ×1

utf-8 ×1

visual-studio-2010 ×1