首先,我使用 ANSI C(不是C++和任何非标准库如MS CRT或glibc等)开发了一个独立的平台库。
在一些搜索之后,我发现在 ANSI C 中进行国际化的最佳方式之一是使用 UTF-8 编码。
在 utf-8 中:
- strlen(s):始终计算字节数。
- mbstowcs(NULL,s,0):可以计算字符数。
但是,当我想要随机访问 utf-8 字符串的元素(字符)时,我遇到了一些问题。
在 ASCII 编码中:
char get_char(char* assci_str, int n)
{
// It is very FAST.
return assci_str[n];
}
在UTF-16/32编码中:
wchar_t get_char(wchar_t* wstr, int n)
{
// It is very FAST.
return wstr[n];
}
这里涉及到UTF-8编码问题:
// What is the return type?
// Because sizeof(utf-8 char) is 8 or 16 or 24 or 32.
/*?*/ get_char(char* utf8str, int n)
{
// I can found Nth character of string by using for.
// But it is too slow.
// What is the best way?
}
感谢您。
mbstowcs
不能保证做你所说的事情。它取决于你的区域设置,请参阅<locale.h>
,并且通常与编码无关。如果要处理明确的编码,请使用iconv
或类似工具。 - Kerrek SB替换(char* str){对于(...){...获取字符(i)...}
- Amir Saniyan