我在过去几天一直在阅读有关Unicode和UTF-8的内容,我经常遇到类似于此的逐点比较:
int strlen_utf8(char *s)
{
int i = 0, j = 0;
while (s[i])
{
if ((s[i] & 0xc0) != 0x80) j++;
i++;
}
return j;
}
Run Code Online (Sandbox Code Playgroud)
有人可以澄清与0xc0的比较并检查它是否是最重要的位?
谢谢!
编辑:ANDED,而不是比较,使用了错误的单词;)
我需要在C中处理unicode字符串.我听说ICU是适当的库集,但我没有任何运气入门.
所以我的问题是:任何人都可以提供一个关于在C中使用带ICU的unicode字符串的优秀初学者教程的链接
PS我已经安装了libicu44(在Ubuntu 11.04下).
如何获取String中的Unicode字符数?
给出一个char[]泰国字符:
[?, ?, ?, ?, ?, ?, ?]
Run Code Online (Sandbox Code Playgroud)
这在String中出现:อภิชาติ
String.length() 返回7.我知道(技术上)有7个字符,但是我需要一个能够返回5的方法.这就是屏幕上显示的字符空间的确切数量.
我有一个程序也接受非英语字符作为输入字段。因为我们使用strlen,所以当存在非英文字符时,在计算字符串长度时,它无法给出预期的长度。对于输入nova,输出是4,而对于输入\xc3\xb1ova,输出是5,而输出应该是4。
strlen("nova")=4strlen("\xc3\xb1ova")=5在第二种情况下,我期望输出为4相反。
我的申请有一个国际目标,来自许多国家的人都会使用它,他们将使用自己的语言输入文本(我必须处理的文本).
例如,如果我必须使用字符比较来列出两个字符串的差异,那么这个简单的C#代码就足够了,或者我错过了什么?
var differences = new List<Tuple<int, char, char>>();
for (int i=0; i < myString1.Length; ++i)
{
if (myString1[i] != myString2[i])
differences.Add(new Tuple<int, char, char>(i, myString1[i], myString2[i]));
}
Run Code Online (Sandbox Code Playgroud)
给定代码有效以不同语言执行此任务(我的用户不限于美国字符集)?