Luaはconst char *
上で動作し、ドキュメントに応じて、次の処理を行いutf8.len()
という名前の関数を持っている:カウント数
は、文字列s https://www.lua.org/manual/5.3/manual.html#6.5でUTF-8文字の数を返します。
私は、Win32 APIとのインターフェイスを持つカスタマイズされたLuaを使用しています。私のアプリケーションのWin32バックエンドにUTF-8文字列を渡す必要があるときは、MultiByteToWideChar()
を使ってUTF-8からWCHAR
に変換します。
utf8.len()
関数と同じ
正確を行いますが、代わりにUTF-8
const char*
文字列のUTF-16
WCHAR*
文字列を取り機能を探しています。 Unicodeの複雑さや用語解説について私に尋ねないでください。私は既に、
という文字は、Unicodeについて言及するときに非常にあいまいですが、Luaのドキュメントではこの用語を正確に使用していると言われています(上記参照)。ですから、私が望むのは、Luaのものと全く同じ機能を果たすものですが、の代わりに
WCHAR*
で動作します.Luaの作者が実際に意味するものにかかわらず、
という文字はです。私は、ちょうど
utf8.len()
と同じカウントを与えるが、UTF-8文字列から
MultiByteToWideChar()
で生成されたUTF-16
WCHAR*
文字列で動作する関数を持っているだけです。
私は質問は...今
一つの最後の音符十分ようやく十分に明確であると思います。私は、可能な場合にはICUのような外部のライブラリを使用しないようにしたいと思います。 Win32 APIソリューションが推奨されます。
あなたは2つの異なることを求めています:*コードポイント*と*文字*。 *文字*という用語は、Unicodeを指すときに非常にあいまいです。 graphemeクラスターのようにコードポイントを意味する可能性があります。どちらを求めていますか? – IInspectable
脇に:Windows SDKには 'TSTR'型はありません。あなたはおそらく 'TCHAR'を参照しており、' TCHAR'と 'wcslen()'は互換性がありません。前者は、プリプロセッサシンボルに応じて、 'char'または' wchar_t'のいずれかを表します。後者は 'const wchar_t *'だけで動作します。 – IInspectable
'TCHAR'は、Windows 95/98/MEとWindows NTの両方をコーディングしたいときに便利でした。前者はUnicodeをサポートしていませんでした。しかし、少なくとも10年間、これは関係がありませんでした。あなたはUTF-16に興味があります。したがって、 'wchar_t'を使用して関連させてください。 'TCHAR'を使わないでください。あなたの質問については、*文字*の意味をよりよく定義しなければなりません。正確な定義をお願いできますか? –