【发布时间】:2017-11-16 03:30:54
【问题描述】:
我目前正在使用 c++ 编写一个同时处理字母和韩文字符的程序。
但是我了解到 c++ 中char 的大小只有 1 个字节。这意味着为了处理外来字符或 UNICODE,它需要为一个字符使用两个字符。
string s = string("a가b나c다");
cout<< s.length();
打印9
但我的问题是 c++ 执行如何区分这两种不同类型的字符?
例如,如果我创建一个大小为 9 的 char 数组,它如何知道它是 9 个 ascii 字符还是 4 个 unicode + 1 个 ascii?
然后我想通了:
char c;
int a;
char* cp = "가나다라마바사아";
for (int i = 0; i < 20; i++) {
c = a = cp[i];
cout << "\n c val : " << c;
cout << "\n a val : " << a;
}
仅打印出 a 的负值。
c val :
a val : -80
c val :
a val : -95
c val :
a val : -77
c val :
a val : -86
c val :
a val : -76
c val :
a val : -39
我可以推断出对于非 ascii 字符它只使用负值?但这不是很浪费吗?
总结我的问题:c++ 是否仅通过查看它们是否为负来区分 ascii 字符和 unicode 字符?
总结回答:解析器通过查找字符的前几位来决定是否将 1~4 个字符视为 1 个字形,所以在某种程度上我的假设是有效的。
【问题讨论】:
-
ASCII 是 unicode 的子集,没有“区别”
标签: c++