2014-09-04 56 views
6

在我研究C和C++中的字符编码期间,我遇到了两种常见的编码方式:多字节字符和宽字符。为了加强我对这些系统的理解(好处和缺点),我想举一些例子。 由于本地支持wchar_t类型,因此使用宽字符执行示例并不是问题。但是当我想创建一个包含所谓的多字节字符的字符串时,我遇到了一个问题。如何在C中创建多字节字符

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

+0

在qt中,tr函数处理编译器与多字节字符串的差异。你所需要做的就是用utf-8编码你的源文件,并用字符串文字调用tr。 – 2014-09-04 13:44:58

+1

你的意思是......像'“\ xc3 \ x84”'? (这是德国的“Ä”UTF-8编码) – 2014-09-04 13:47:10

+0

@DavidFeurle我认为这是不正确的,'tr()'有i18n(翻译)。 – Angew 2014-09-04 13:47:14

回答

2

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

如果你有一个宽字符字符串,可以根据使用功能wcstombs(在<stdlib.h>wcsrtombs(在<wchar.h>)的C语言环境,并获得相当的多字节字符串。

C++语言环境系统还提供了一种转换方法。 (请查看codecvt方面的inout成员,我不会在这里提供关于其使用的教程,网站cppreference有示例代码,例如out)。

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

相关问题