最初に、ANSI C(C++およびMS CRTやglibcなどの非標準のライブラリではありません)を使用して独立したプラットフォームライブラリを開発します。ANSI C UTF-8の問題
いくつかの検索を行った結果、ANSI Cの国際化に最適な方法の1つが、UTF-8エンコーディングを使用していることがわかりました。 UTF-8で
:
- STRLEN(複数可):常にバイトの数をカウントします。
- mbstowcs(NULL、s、0):文字の文字数をカウントできます。
しかし、私はutf-8文字列の要素(文字)のランダムアクセスをしたいときにいくつかの問題があります。 ASCIIエンコーディングで
:
// 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?
}
ありがとう:UTF-8エンコーディングで
wchar_t get_char(wchar_t* wstr, int n)
{
// It is very FAST.
return wstr[n];
}
そして、ここに私の問題:UTF-32分の16エンコーディングで
char get_char(char* assci_str, int n)
{
// It is very FAST.
return assci_str[n];
}
。
"N番目の文字"を使用する例がありますか? –
'mbstowcs'はあなたが主張することを保証しません。あなたのロケール設定に依存します( ''を参照)、一般的にエンコードには依存しません。明確なエンコーディングを扱う場合は、 'iconv'などを使用してください。 –
@R: 'replace(char * str){...(get_char(i)...} ') –