std :: string.c_str()使用什么编码?

Gil*_*ili 30 c++ string utf-8

我试图将C++转换std::string为UTF-8或std::wstring不丢失信息(考虑包含非ASCII字符的字符串).

根据http://forums.sun.com/thread.jspa?threadID=486770&forumID=31:

如果std :: string具有非ASCII字符,则必须提供一个从编码转换为UTF-8的函数[...]

std::string.c_str()使用什么编码?如何将其转换为UTF-8或std::wstring跨平台方式?

Ale*_*lli 44

std::string本身不使用编码 - 它将返回您放入其中的字节.例如,那些字节可能正在使用ISO-8859-1编码...或任何其他,真的:有关编码的信息就不存在 - 你必须知道字节来自哪里!

  • @Gili,右:你无法将未知编码中的字节序列可靠地转换为UTF-8(或其他任何东西;-).我建议你让调用者提供UTF-8数据 - 大多数其他编码不允许编码_every_可能的Unicode字符串.正如@Naaff所说,ASCII是UTF-8(以及ISO-8859-*和许多其他编码)的​​一个特例,所以如果你的情况就不用担心了(文档中的脚注提醒用户这个事实可能会节省_them_担心;-). (3认同)
  • ASCII字符串也是UTF-8字符串和ISO-8859-1字符串&c:这就是为什么paren是在UTF-8之后而不是在ASCII之后;-). (2认同)
  • 文档支持这一点:*请注意,此类独立于所使用的编码处理字节:如果用于处理多字节或可变长度字符(如UTF-8)的序列,则此类的所有成员(例如长度)或者大小)以及它的迭代器仍将以字节(不是实际编码字符)的形式运行.*http://www.cplusplus.com/reference/string/string/ (2认同)

Naa*_*aff 6

std::string包含任何字节序列,因此编码取决于您.你必须知道它是如何编码的.但是,如果您不知道它是其他东西,它可能只是ASCII.在这种情况下,它已经兼容UTF-8.

  • 我看到"它可能只是......"是许多字符编码错误的根源.我建议永远不要猜测角色编码是什么:始终要非常清楚你所采取的和你所制作的.在每种情况下,如果未指定字符集,则指定其他参数/​​返回值以指示编码. (18认同)