Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ g++;4.8.2编译器是否支持Unicode字符?_C++_Gcc_G++_Ascii - Fatal编程技术网

C++ g++;4.8.2编译器是否支持Unicode字符?

C++ g++;4.8.2编译器是否支持Unicode字符?,c++,gcc,g++,ascii,C++,Gcc,G++,Ascii,考虑以下陈述- cout<<"\U222B"; int a='A'; cout<<a; cout在回答第一个问题时,Unicode的底部128个代码点是ASCII码。这两者之间没有真正的区别 您之所以看到65,是因为您正在输出的东西(a)是int,而不是char(它可能是以char开头的,但是,通过将其放入a,您修改了将来的处理方式) 对于第二个问题,字节是char ,至少就ISO和C++标准而言。如果CHAR\u位被定义为8,这就是CHAR类型的宽度 但是,您应该

考虑以下陈述-

cout<<"\U222B";

int a='A';
cout<<a;

cout在回答第一个问题时,Unicode的底部128个代码点是ASCII码。这两者之间没有真正的区别

您之所以看到
65
,是因为您正在输出的东西(
a
)是
int
,而不是
char
(它可能是以
char
开头的,但是,通过将其放入
a
,您修改了将来的处理方式)


对于第二个问题,字节是char ,至少就ISO和C++标准而言。如果

CHAR\u位
被定义为
8
,这就是
CHAR
类型的宽度

但是,您应该记住Unicode代码点和Unicode表示(如UTF-8)之间的区别。如果使用UTF-8表示,使用
CHAR\u BIT==8
仍将允许Unicode工作

我的建议是使用十六进制转储实用程序捕获程序的输出,您可能会发现Unicode字符显示为
e288 ab
,这是
U+222B
的UTF-8表示形式。然后,它将由程序之外的东西(例如,终端程序)进行解释,以呈现正确的图示符:

#包括
使用名称空间std;

int main(){cout这里有几个不同的问题:

  • 正如paxdiablo指出的,您看到“65”是因为您将“a”(值'a'=ASCII 65)输出为“int”

  • 是,gcc支持Unicode源文件:

  • 最后一个问题是C++编译器是不是把你的“字符串”当作8位ASCII或N位Unicode来处理。 C++11增加了对Unicode字符串和字符串文本的显式支持,编码为UTF-8、UTF-16大端、UTF-16小端、UTF-32大端和UTF-32小端:

    附言:

    就Unicode的语言支持而言:

    • Java完全是为Unicode而设计的

      不幸的是,当时只有UTF-16.Java5支持Nicode6.0,Java7Unicode 6.0,而当前的Java8支持Unicode 6.2

    • .Net较新。C#、VB.Net和C++/CLI都完全支持Unicode 4.0

      较新版本的.Net支持较新版本的Unicode。例如,.Net 4.0支持Unicode 5.1]()

    • Python3还支持Unicode 4.0:


    首先,如果我的英语有错误,请为我的英语道歉

    一个C++字节,是一个足够大的比特,足以传输标准所指定的每一个字符。这个需要的字符集是ASCII的子集,以及先前定义的“比特量”。必须是<代码> char < /c> >的内存单元,C++的最小内存原子。其他类型必须是 siZeOver(char)< /C> >(任何C++值都是存储在内存中的一组字符)。 < > >代码> SIEZOF(char)< /C>定义为1,因为是C++的内存测量单元,如果1表示1物理字节,则是一个实现问题,但普遍被接受为1字节。 我不明白的是16位或32位字节是什么意思

    另一个相关的问题是关于编译的代码应用于源文本(包括文本字符串)的编码。如果我没有错的话,编译器会将每个翻译单元(源代码文件)规范化为它选择的编码来处理文件


    我真的不知道在幕后会发生什么,但也许你已经读到了一些关于源文件/内部编码和16位/32位编码的东西,所有这些乱七八糟的东西都混在你的头上了。尽管如此,我仍然感到困惑。

    Unicode绝对是一个字符集;它定义了一组字符,为每个字符分配了一个抽象代码UTF-8是Unicode字符集的编码,它将每个代码点映射到具体的字节序列(长度可能为1).UTF-16是Unicode字符集的不同编码。CP-1252是一组字符的单字节编码;确切的字符集没有名称,因此有时也被混淆地称为CP-1252。(CP代表“代码页”,因此它清楚地表示映射。)
    sizeof(char)
    定义为1字节,其中“字节”C标准有自己的“字节”定义,它不一定与八位字节完全相同,它正好是8位。C++实现可以有16位或32位字节,但是编码类似UTF-8使得它可以用8位字节表示Unicode。你确信C++标准说“代码> siZeof(char)吗?
    长度必须至少为8位?我不确定“Python3支持Unicode 4.0”是什么意思.Python3支持Unicode版本的时间比Unicode 4.0要晚得多,因此谈论Python3支持Unicode版本是很有意义的。作为一个数据点,Python3.5的
    unicodedata
    模块对应于Unicode 8.0.0。这是我最后一次看它(承认是很久以前的事了),Python支持Unicode 4.0。建议:如果您有当前版本/当前Unicode支持的链接,请发布!正如我所说,我真的不知道“Unicode x.y.z支持”是什么意思,因为Python不进行文本呈现。但是很容易跟踪
    unicodedata
    模块,该模块定义了标识符中的有效字母。请参阅(如有必要,请更改该URL中的版本号。重要的是控制台对Unicode的支持,因为程序只需在某些字符集中输出一个字节序列,控制台将以某种方式对其进行处理以打印输出,如果控制台对Unicode的支持不好,则无法看到预期结果
    'a'
    是65 in Unicode)
    pax> printf "\xe2\x88\xab\n"
    ∫