0

ユーザーからの入力を UTF8 文字列として取得し、文字列の言語を検出して、文字列を圧縮された byte[]として保存したいと思います。すべての文字が同じ言語でない場合、それは有効な入力ではありません。ユーザーから有効な入力を取得した後、この入力文字列をバイト配列として保存したいと思います。

ユーザーが英語以外の文字を含む文字列を入力した場合、各文字は 1 バイト以上を占めるため、文字列の言語を保存し、各文字を 1 バイトで保存したいと思います (文字を保存できるようになったと思います)。その言語の開始コード ポイントとの違いだけを格納することにより、1 バイトで & すべての文字が同じ言語からのものであるため & (!?) したがって、範囲が狭いために 1 バイトの容量に収まる可能性があります!?)。これは、各文字を 1 バイトに収まるように圧縮する方法です。

これは正しいアプローチですか?はいの場合、文字列内の文字の言語を検出するにはどうすればよいですか?

4

1 に答える 1

1

静的メソッドを提供し、文字の Unicode ブロックを検出するCharacter.UnicodeBlockクラスを見てください。これにより、文字が ARABIC ブロックからのものか、BASIC_LATIN ブロックからのものかがわかります。of(char)of(int)

ただし、複数の *LATIN* ブロックがあり、多くの言語では複数のブロックの文字を使用する必要があることに注意してください。そのため、どの言語が提供されているかを理解するのは非常に難しい作業です。これを自動的に検出する方法は考えられません。

また、多くの Unicode ブロックは巨大であり、1 つの言語のすべての有効な文字を 1 バイトに収めることはできないことにも注意してください。( Unicode 6.1 Character Code Chartsを見て、Unicode がいかに広大であるかを理解してください。) したがって、正直なところ、すべての文字を 1 バイトに圧縮することはできません。

UTF-8 は、長年にわたる国際化標準の結果であり、複数の言語を表現する必要があるソフトウェアにとっておそらく最良のオプションです。より効率的なものを作成しようとすると、おそらく膨大な時間がかかり、わずかな利益しか得られません。

于 2012-08-11T15:36:00.547 に答える