【问题标题】:Unicode to char* c++ 11Unicode 到 char* c++ 11
【发布时间】:2014-02-04 07:09:17
【问题描述】:

我想知道是否有任何方法可以将 unicode 代码转换为 C++ 11 中的字符串或字符。 我一直在尝试使用具有以下编码的扩展拉丁 unicode 字母 Á(例如):

字母:Á
Unicode:0x00C1
UTF8 文字:\xc3\x81

如果硬编码为:

const char* c = u8"\u00C1";

但是如果我得到一个短字节序列,我怎么能做相当于得到 char* 或 std::string 'Á'?

编辑,解决方案:

我终于做到了,如果有人需要,这里是解决方案:

std::wstring ws;
for(short input : inputList)
{
    wchar_t wc(input);
    ws += wc;
}
std::wstring_convert<std::codecvt_utf8<wchar_t>> cv;
str = cv.to_bytes(ws);

感谢 cmets 他们非常有帮助。

【问题讨论】:

  • 我已经使用 wchar_t 加载 unicode 字节,并使用 wstring 连接它们,但我仍然遇到从中检索普通 char* 或 std::string 的问题,有什么想法吗?
  • 如果你使用std::wstring_convert::to_bytes 这很简单
  • 专业提示:只需使用auto

标签: string c++11 unicode char


【解决方案1】:

C++11 标准包含codecvt_utf8,它在某些内部字符类型(如果您的编译器有char16_t,否则尝试wchar_t)和UTF-8 编码之间进行转换。

【讨论】:

  • 我知道使用 wchar_t 我可以检索它,但我仍然需要转换为 char* 或 std::string。还是谢谢你的回复
【解决方案2】:

问题是char只有一个字节长度,而unicode字符需要两个字节大小。

您仍然可以将其视为 char*,但您必须记住,您处理的不是 ascii 字符串(会有零)。

您可能需要切换到wchar_t

【讨论】:

    猜你喜欢
    • 2021-11-17
    • 1970-01-01
    • 1970-01-01
    • 2011-01-24
    • 1970-01-01
    • 1970-01-01
    • 2013-10-04
    • 2016-01-08
    • 1970-01-01
    相关资源
    最近更新 更多