c++ - 如何在 MSVC 中的原始字符串文字中使用 Unicode 符号/表情符号

标签 c++ windows encoding character-encoding

有什么方法可以确定我的 std::string 将使用哪种特定编码?如果字符串看起来像这样 std::string("This is a test"); 而另一个将使用非 ASCII 符号,那么如何从 std::string 位置处理它像 std::string("This is a russian alphabet: Ребята сдохли");?我需要知道这一点,这样我才能将这种类型的带有“const char*”作为构造函数参数的字符串转换为 UTF-8 编码的 std::string。

最佳答案

没有 std::string 编码这样的东西。 std::string 包含字节。时期。它是一个 std::vector<char>,带有一些 ASCII 友好的辅助函数。

这些字节可能会以近乎无限的方式被解释——如 ASCII、UTF-8、Shift-JIS……在某些情况下,如果你对问题域有足够的了解,你可以猜测编码,以及 you could do things like looking for a UTF-8 BOM at the start ,但是没有一个并不意味着字符串不是 UTF-8 并且一个的存在甚至不一定意味着它是 - 它可能是一些恰好看起来像 BOM 的字节(链接的答案似乎很乐观大部头书)。一般来说,这就像试图从水中提取油。

如果你需要知道你接收到的字节序列的编码,你需要发送它们的实体来告诉你编码是什么(一些 Exif 字段在 ASCII 中使用一个 8 字符的标签前缀来宣布对文本 block 的其余部分进行编码),或者以其他方式记录双方将使用的协议(protocol),例如UTF-8,然后要求遵守此协议(protocol),如果遇到不兼容的字节序列,则踢出错误消息/异常。

就我个人而言,我倾向于在我的整个应用程序中采用 ASCII 或 UTF-8(根据需要),如果我从已知编码为其他内容的源获取文本,则在输入点进行转换。

也不要忘记,如果您的字符串不是 ASCII(或其他单字节编码),那么对其进行元素操作将无法正常工作。您需要一个库来解释字符串的组件、编码域 字符 并在该分辨率下工作,而不是在字节级别工作。存在大量现有的体面库来管理各种 Unicodey 编码。

关于c++ - 如何在 MSVC 中的原始字符串文字中使用 Unicode 符号/表情符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53517555/

相关文章:

c++ - 为什么在 C++ 中不为私有(private)嵌套类调用析构函数?

windows - 如何将 Windows 2003 Server 计划任务移动/复制到 Windows 2012 Server?

c++ - 如何检测图片中的 window 或门?

ruby `encode' : "\xC3"从 ASCII-8BIT 到 UTF-8 (Encoding::UndefinedConversionError)

algorithm - UTF-8 使用的前导位计数编码技术的名称是什么?

node.js - Express js 将 header 编码为 utf-8

c++ - 在哪里可以找到 "Introduction to 3D game programming with DirectX 9.0c"的源代码示例?

c++ - 如何在不使用 QApplication 的情况下使用 QCursor::pos() ?

C++时间序列库(分析处理)

c++ - 初始化 COM 对象的问题