c++ - 如何在 C 中创建多字节字符

标签 c++ c encoding character multibyte

在研究 C 和 C++ 字符编码的过程中,我遇到了两种通用的编码方式:多字节字符和宽字符。为了加强我对那些系统(优点和缺点)的理解,我想做一些例子。 由于 wchar_t 类型的 native 支持,使用宽字符做示例不是问题。但是当我想创建一个包含那些所谓的多字节字符的字符串时,我遇到了问题。

我如何实际创建一个多字节字符串,该字符串使用与 char 数组一起使用的编码(使用 Visual C++)?这种编码确实存在:http://www.gnu.org/software/libc/manual/html_node/Shift-State.html .但我只读过它,从未见过一个实际的例子。还是您必须为这种字符串创建自己的编码?

最佳答案

如果你能够创建一个宽字符串文字,简单地省略 L 应该给你一个多字节字符串文字与一个实现定义的编码(gcc 有一个选择它的选项,我不知道 visual C++) .

如果您有一个宽字符串,您可以使用函数 wcstombs 根据 C 语言环境获得等效的多字节字符串(在 <stdlib.h> 中)和 wcsrtombs (在 <wchar.h> 中)。

C++ 语言环境系统也提供了一种方法来进行这种转换。 (寻找 inoutcodecvt 成员,我不会在这里提供它们的使用教程,网站 cppreference 有示例代码,例如 out )。

我不确定您能否在 Unix 或 Windows 上轻松找到对带移位状态的编码的支持。您应该搜索中国、日本、韩国、越南的编码(例如 ISO 2022-JP ,但在我看来,Unix 倾向于使用 EUC-JP 和 Windows Shift JIS )。

关于c++ - 如何在 C 中创建多字节字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25666999/

相关文章:

c++ - 在 xll 中通过 xlcFormatNumber 设置 Excel 数字格式

c++ - 运算符删除关联性

命令行参数可用于其他函数吗?

c - 如何在C中交换双向链表中的两个相邻项

c++ - 使用 vector 创建形状

c++ - 有什么方法可以将两个或多个不同的类链接到一个类中(然后在 vector 上使用)?

c - 带有空指针的 Memcpy

python - 解析俄语站点编码错误

ios - 如何将任何基数转换为基数 10?

php - 从中文参数的 php 编码错误调用 python 脚本