我已经意识到以下几点:
- Unicode字符可以表示为最多4个字节的序列。因此,如果一个字符用两个或多个字节表示 - 字节排序 对于BEM或LEM来说很重要
- UTF-8逐字节(不是多字节写入或读取)将字节写入文件/网络流,这意味着一个字符是 以两个或多个字节表示,而编码则写入一个字节 时间。然后,在解码它时,BEM或LEM无关紧要 正确读回字节,并且在写入时不会交换它们 读。
- UTF-16或UTF-32在编码时总是使用两个或四个字节,因此LEM或BEM现在真的很重要,因为多字节读/写。
- 另外,我理解UTF-8如何知道在从文件读取时将字节解释为字符(解码)。
醇>
因此。这是一个例子:
我在C ++中声明并初始化String
变量为"ANФГ"
。
的问题。
char
是一个字节的字符数据类型。 String
类基于C ++中的char[]
?EDIT_1:我不明白一件事。如果我有三个字节: - 1000 1111 - 1100 0000 - 0100 0000 第一个和第二个代表UTF-8中的一个字符,第三个代表一个字符。 我在上面写的字节顺序。 每个字节都有自己的地址,对吧? 但是当多字节写入发生时,两个字节存储在一个地方?我的意思是,任何输出流按顺序从左到右写入数据?那么它也会从左到右回读?因为LEM或BEM交换字节..但是当它是多字节写入时。但是当我们一次只写一个字节时,它从左到右有自己正确的顺序吗?
答案 0 :(得分:1)
std::string
(或更确切地说,std::basic_string<char>
)使用char
来存储其数据。它与编码无关,因此如果您例如调用size()
,您将获得表示字符串的实际char
个数,而不是字符数或代码点数。u8
前缀来获取UTF-8 string literals(例如u8"ANФГ"
)。std::string
将包含UTF-8,如果您使用的是UTF-8,则会将UTF-8写入文件。 operator<<()
。