猿问

在C ++源代码中使用Unicode

C ++源代码的标准编码是什么?C ++标准是否甚至对此有所说明?我可以用Unicode编写C ++源代码吗?


例如,我可以在注释中使用非ASCII字符,例如中文字符吗?如果是这样,是允许使用完全Unicode还是仅允许Unicode的一部分?(例如,该16位首页或任何被称为的页面。)


此外,我可以对字符串使用Unicode吗?例如:


Wstring str=L"Strange chars: â Țđ ě €€";


慕运维8079593
浏览 515回答 3
3回答

繁星淼淼

用C ++进行编码相当复杂。这是我对此的理解。每个实现都必须支持基本源字符集中的字符。这些包括§2.2/ 1(C ++ 11中的§2.3/ 1)中列出的常见字符。这些字符都应该合而为一char。此外,实现还必须支持一种使用名为universal-character-names和\uffff或的方式来命名其他字符的方法,\Uffffffff并且可以用来引用Unicode字符。它们的一个子集可用于标识符(在附录E中列出)。一切都很好,但是从文件中的字符到源字符(在编译时使用)的映射是实现定义的。这构成了所使用的编码。这是它的字面意思(C ++ 98版):必要时,以实现定义的方式将物理源文件字符映射到基本源字符集(为行尾指示符引入换行符)。Trigraph序列(2.3)替换为相应的单字符内部表示形式。基本源字符集(2.2)中未包含的任何源文件字符都将替换为指定该字符的通用字符名称。(一个实现可以使用任何内部编码,只要处理在源文件中遇到的实际扩展字符,以及在源文件中表示为通用字符名称的相同扩展字符(即,使用\ uXXXX表示法)等同地。)对于gcc,您可以使用选项进行更改-finput-charset=charset。此外,您可以在运行时更改用于重新设置值的执行字符。正确的选项是-fexec-charset=charsetchar(默认为utf-8)和-fwide-exec-charset=charset(默认为utf-16或utf-32取决于大小wchar_t)。

慕桂英3389331

除了litb的帖子,MSVC ++也支持Unicode。我了解它从BOM表获取Unicode编码。它绝对支持诸如int (*♫)();或的代码,const std::set<int> ∅; 如果您真的对代码感到迷惑:typedef void ‼; // Also known as \u203Cclass ooɟ {&nbsp; &nbsp; operator ‼() {}};

潇潇雨雨

据我所知,C ++标准未提及源代码文件编码。通常的编码是(或曾经是)7位ASCII-一些编译器(例如,Borland的编码器)会讨厌使用高位的ASCII字符。如果您的编译器和编辑器接受Unicode字符,则没有技术上的理由,因为大多数基于Linux的现代工具以及许多基于Windows的更好的编辑器都可以毫无问题地处理UTF-8编码。我不确定微软的编译器会。编辑:看起来微软的编译器将接受Unicode编码的文件,但有时也会在8位ASCII上产生错误:warning C4819: The file contains a character that cannot be representedin the current code page (932). Save the file in Unicode format to preventdata loss.
随时随地看视频慕课网APP
我要回答