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

标签 c++ windows encoding character-encoding

有什么方法可以确定我的 std::string 将使用什么特定编码?如果字符串看起来像这样 std::string("This is a test");,那么从 std::string 位置如何处理?另一个将使用非 ASCII 符号,如 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/

相关文章:

html - 使用 CSS3 和 HTML5 制作小部件

windows - 在最终用户系统上调试 "application configuration is incorrect"问题的好方法?

datetime - 为什么在使用请求时解析我的日期成功,但在使用 reqwests 时失败?

c++ - (VS2010 C++) 每次运行程序都执行一个命令?

c++ - 嵌套渲染循环是不好的做法吗?

windows - 如何创建 list 文件以将我的可执行文件/插件指向我的特定版本的 Qt.dll?

apache - 分 block 传输编码示例

c++ - 为什么按下 "Tab"键只会发出 QEvent::ShortcutOverride 事件?

c++ - 避免菱形继承(钻石问题)

encoding - Notepad++中的编码和转换有什么区别?