将“普通” std :: string转换为utf-8

代达罗斯

让我们看看我是否可以在没有太多事实错误的情况下进行解释...

我正在编写一个字符串类,并且希望它使用utf-8(存储在std :: string中)作为内部存储。我希望它既可以接受“正常”std::stringstd::wstring可以接受输入和输出。

使用std :: wstring没问题,我可以std::codecvt_utf8<wchar_t>用来将std :: wstring都转换为。

但是,经过广泛的谷歌搜索和搜索之后,我还没有找到在“正常/默认” C ++ std :: string(我假设在Windows中使用本地系统本地化吗)和utf-8 std之间转换的方法: :串。

我猜一个选择是先使用以下方法将std :: string转换为std :: wstring std::codecvt<wchar_t, char>,然后如上所述将其转换为utf-8,但这似乎效率很低,因为至少应该将char的前128个值转换为如果我理解正确的话,可以直接转换为utf-8,无需进行任何转换,而无需考虑本地化。

我发现了一个类似的问题:C ++:如何将ASCII或ANSI转换为UTF8并存储在std :: string中尽管我对此答案有些怀疑,因为它很难编码为拉丁文1,并且我希望它可以与所有类型的拉丁文一起使用。本地化是安全的。

没有涉及boost的答案,我不想让我的代码库与之一起工作。

简单

如果您的“普通字符串”是使用系统的代码页编码的,并且您想将其转换为UTF-8,则应该可以使用:

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);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在UTF8中将System :: String转换为std :: string,随后将其转换为char *作为c_str

来自分类Dev

将std :: string转换为v8 :: string

来自分类Dev

将std :: string转换为uint8 *

来自分类Dev

如何将std :: vector <uint8_t>转换为std :: basic_string <std ::: byte>以用于pqxx

来自分类Dev

将byte *转换为8个字节或更少字节的std :: string会导致崩溃

来自分类Dev

如何将const uint8_t []转换为std :: string?

来自分类Dev

将ANSI转换为UTF8

来自分类Dev

将CSV转换为UTF-8

来自分类Dev

如何将List <String []>值从UTF-8转换为String?

来自分类Dev

将Platform :: String转换为std :: string

来自分类Dev

将 string::iterator 转换为 std::string

来自分类Dev

需要使用“ exp / utf8string”将代码转换为更高的标准库代码

来自分类Dev

将String转换为Android JSONObject会丢失utf-8

来自分类Dev

将string.decode('utf8')从python2转换为python3

来自分类Dev

将string.decode('utf8')从python2转换为python3

来自分类Dev

将std :: string转换为llvm :: MemoryBuffer

来自分类Dev

将const char *转换为std :: string

来自分类Dev

将std :: string :: length转换为int

来自分类Dev

如何将std :: string指针转换为std :: string

来自分类Dev

将array <String ^> ^转换为std :: vector <std :: string>

来自分类Dev

在C ++中使用utf8库将UTF 16转换为UTF8

来自分类Dev

将std :: string转换为std :: chrono :: duration

来自分类Dev

将std :: vector <char>转换为std :: string

来自分类Dev

将std :: string索引转换为std :: vector中的整数

来自分类Dev

将std :: string转换为std :: chrono :: duration

来自分类Dev

如何将普通的Java for循环转换为Java 8流?

来自分类Dev

Opencv ::将Mat_ <Vec3f>转换为普通的8位彩色图像

来自分类Dev

将std :: vector <std :: vector <std :: string >>转换为std :: vector <std :: vector <double >>

来自分类Dev

将字符串转换为UTF 8

Related 相关文章

  1. 1

    在UTF8中将System :: String转换为std :: string,随后将其转换为char *作为c_str

  2. 2

    将std :: string转换为v8 :: string

  3. 3

    将std :: string转换为uint8 *

  4. 4

    如何将std :: vector <uint8_t>转换为std :: basic_string <std ::: byte>以用于pqxx

  5. 5

    将byte *转换为8个字节或更少字节的std :: string会导致崩溃

  6. 6

    如何将const uint8_t []转换为std :: string?

  7. 7

    将ANSI转换为UTF8

  8. 8

    将CSV转换为UTF-8

  9. 9

    如何将List <String []>值从UTF-8转换为String?

  10. 10

    将Platform :: String转换为std :: string

  11. 11

    将 string::iterator 转换为 std::string

  12. 12

    需要使用“ exp / utf8string”将代码转换为更高的标准库代码

  13. 13

    将String转换为Android JSONObject会丢失utf-8

  14. 14

    将string.decode('utf8')从python2转换为python3

  15. 15

    将string.decode('utf8')从python2转换为python3

  16. 16

    将std :: string转换为llvm :: MemoryBuffer

  17. 17

    将const char *转换为std :: string

  18. 18

    将std :: string :: length转换为int

  19. 19

    如何将std :: string指针转换为std :: string

  20. 20

    将array <String ^> ^转换为std :: vector <std :: string>

  21. 21

    在C ++中使用utf8库将UTF 16转换为UTF8

  22. 22

    将std :: string转换为std :: chrono :: duration

  23. 23

    将std :: vector <char>转换为std :: string

  24. 24

    将std :: string索引转换为std :: vector中的整数

  25. 25

    将std :: string转换为std :: chrono :: duration

  26. 26

    如何将普通的Java for循环转换为Java 8流?

  27. 27

    Opencv ::将Mat_ <Vec3f>转换为普通的8位彩色图像

  28. 28

    将std :: vector <std :: vector <std :: string >>转换为std :: vector <std :: vector <double >>

  29. 29

    将字符串转换为UTF 8

热门标签

归档