2016-04-27 18 views
1

アップロードされたときにファイルの内容を検証しようとしていますが、Unicodeエンコーディングに固執しています。 ASCII範囲にないUnicode特殊文字を探すのは興味がありません。ファイルの内容に\ u0046のような少なくとも1つのUnicodeパターンが含まれているかどうかを調べようとしています。ユニコードパターンの正規表現のための正規表現

たとえば、 'script'という単語を含むファイルは除外しますが、ファイルにこの単語がUnicodeで書かれているとどうなりますか?確かに、Javaはコンテンツを読むときにそれを通常の文字列にデコードしますが、これに頼ることができない場合はどうなりますか?

私はインターネットで検索している限り、\ u0046のように書かれたU + 0046のようなUnicode文字を見たことがあります。これに基づいて、私は次の正規表現を書いた:

(\\u|U\+).... 

これは、\ uまたはU +に続いて4文字を意味する。このパターンは私が望むものを実現しますが、Unicode文字を書く他の方法があるのだろうかと思います。それは常に\ uまたはU +ですか? \ uまたはU +の後ろに4文字以上または以下にすることはできますか?

おかげ

+0

達成したいことがわかりません。例えば、 ' 'のようなXML文字エスケープや、文字をエスケープするための無数の方法があります。 – Henry

+0

私は文字列内のUnicode文字を検索する必要がありますが、Unicodeコードが意味するものではありません。たとえば、U + 0061は "a"文字ですが、私は文字自体と一致させたくありませんが、Unicodeシーケンス(コード)の表示にします。ですから、ファイルの内容にU + 0061や\ u0061のようなシーケンスがあれば、ファイルをブロックする必要があります。だから私はこれのためのパターンを作成できるかどうかを知りたい。 –

+0

ステップに戻ります。危険なことは、実際のコンテンツよりもファイルのタイプ(後でどのように使用するか)に大きく依存します。例えば、U + 0046はほとんどの文脈において無害です。したがって、この検証で達成したいことは興味深いです。あなたはどのファイルをチェックしますか? – Henry

答えて

2

表記U + は、Unicodeに属し任意の数・オブ・ヘキサ桁がどこコードで機能しないであろう。 Javaソースコードと* .properties \uのあとに4桁の16進数が続くと、UnicodeのUTF-16エンコードが自動的に解析されます。

その検索するパターン:

"\\\\u[0-9A-Fa-f]{4}" 

またはString.contains上:Javaの\Uxxxxxx以外の言語で

"\\u" 

(6進文字)フルUTFのために、可能です-32の範囲。残念ながら、Java 8まではそうではありません。

+0

この\ ude08yoのようなパターンにマッチするための正規表現を書く方法は? 'yo'はユニコード '\ ude08'に連結された単語です、私はそれらを分離する方法が必要です、任意のアイデア? –

関連する問題