由于在这个问题的评论中有几个海报传播了大量的错误信息:C++ ABI issues list
我创建了这个以澄清。
答案 0 :(得分:4)
实施定义。甚至是应用程序定义;标准 并没有真正对应用程序的功能进行任何限制 他们,并期望很多行为依赖于语言环境。所有 实际定义的是string中使用的编码 文字。
在什么意义上。大多数操作系统忽略了大多数编码;你会
如果'\0'
不是一个空字节,则会出现问题,但即使是EBCDIC也符合这一要求
需求。否则,根据具体情况,会有一些
可能很重要的其他字符(路径名中为'/'
,
例如);所有这些都使用Unicode中的前128个编码,所以
将使用UTF-8进行单字节编码。举个例子,我用过
Linux下的文件名的UTF-8和ISO 8859-1。唯一真实的
问题是显示它们:例如,如果您在ls
中执行xterm
,
ls
和xterm
将假定文件名相同
编码为显示字体。
这主要取决于语言环境。根据区域设置,它是 完全可能的窄字符串的内部编码不 对应于用于字符串文字的。 (但它怎么可能 否则,因为必须确定字符串文字的编码 编译时,作为窄字符的内部编码 字符串取决于用于读取它的语言环境,并且可以不同 字符串到下一个。)
如果您正在Linux中开发新应用程序,我强烈要求 建议对所有内容使用Unicode,UTF-32用于宽字符 字符串,UTF-8用于窄字符串。但不要指望 前128个编码点以外的任何字符串 文字。
答案 1 :(得分:-1)
wchar_t
)和ASCII作为(char
)。请注意,ASCII只是7位编码。 Windows使用UCS-2直到Windows 2000,更高版本使用变量编码UTF-16(wchar_t
)。