我相信输出与UTF有关,但我不知道如何。 有人请解释一下吗?
sizeof(char) = 1
sizeof(std::string::value_type) = 1
s1 = abcde, _s1.size() = 5
s2 = abcdé, _s2.size() = 6
输出结果为:
g++ --version
g++ (Ubuntu 5.4.0-6ubuntu1~16.04.1) 5.4.0 20160609
打印QTCreator
g++ -c -m32 -pipe -g -std=c++0x -Wall -W -fPIC -I../strsize -I. -I../../Qt/5.5/gcc/mkspecs/linux-g++-32 -o main.o ../strsize/main.cpp
g++ -m32 -Wl,-rpath,/home/rodrigo/Qt/5.5/gcc -o strsize main.o
编译如下:
using (var webClient = new System.Net.WebClient())
{
var json = webClient.DownloadString("http://localhost:8080/projecten/api/leerlingen");
}
非常感谢!
答案 0 :(得分:4)
é在utf-8中编码为2个字节,0xC3 0xA9。
答案 1 :(得分:4)
abcdé
default input character set is UTF-8。您的编辑器也可能将文件保存为UTF-8,因此在输入.cpp文件中,字符串std::string::length
将有6个字节(正如Peter已经回答的那样,LATIN SMALL LETTER E WITH ACUTE以UTF-8编码,其中2字节)。 module.exports = {
"name": "foo",
"key": true,
};
以字节为单位返回长度,即。 6. QED
您应该在十六进制编辑器中打开源.cpp文件进行确认。
答案 2 :(得分:3)
即使在C ++ 11中,std::string
与UTF-8无关。在size
的{{1}}和length
方法的std::string
我们可以看到:
对于std :: string,元素是字节(char类型的对象),如果使用多字节编码(如UTF-8),则与字符不同。
因此,您应该使用一些第三方unicode兼容库来处理unicode字符串。
如果继续使用带有unicode字符串的非unicode字符串类,则可能会遇到很多其他问题。例如,在尝试比较同样的description和combining character时,您会得到一个虚假的结果。