文字列が有効なUTF-8形式であるかどうかを確認するにはどうすればよいですか?文字列がJavaでエンコードされた有効なUTF-8であることを確認してください
答えて
バイトデータのみをチェックできます。 Stringを構築した場合は、すでに内部的にUTF-16になっています。
バイト配列はUTF-8でエンコードできます。
これはUTF-8変換の一般的なケースです。
String myString = "\u0048\u0065\u006C\u006C\u006F World";
System.out.println(myString);
byte[] myBytes = null;
try
{
myBytes = myString.getBytes("UTF-8");
}
catch (UnsupportedEncodingException e)
{
e.printStackTrace();
System.exit(-1);
}
for (int i=0; i < myBytes.length; i++) {
System.out.println(myBytes[i]);
}
あなたはバイト配列のエンコーディングがわからない場合は、juniversalchardetは、あなたがそれを検出するのに役立つライブラリです。
文字列のインスタンスは、単なるサロゲートコードユニットの形で不正な形式のコードユニットシーケンスを許可するため、厳密に言えば、UTF-16エンコード形式ではありません。ただし、Unicodeの16ビット文字列です。 –
さらに厳密に言うと、Java文字列は[surrogates]を含むことができるため、実際のUnicodeの16ビット文字列ではありません(http://grepcode.com/file/repository.grepcode.com/java/root/jdk/ openjdk/6-b14/sun/nio/cs/Surrogate.java)をUCS4(3バイトおよび4バイト)文字用に使用します。 – rustyx
ICU4Jは、バイト配列のエンコードを検出するのに役立つ別のJavaライブラリです。http://site.icu-project.org/ –
以下の投稿は、公式のJavaチュートリアル(https://docs.oracle.com/javase/tutorial/i18n/text/string.html)から取得したものです。
StringConverterプログラムは Unicode文字を含む文字列を作成することによって開始します:UTFにStringオブジェクトを変換するには
AêñüC
:印刷された場合
String original = new String("A" + "\u00ea" + "\u00f1" + "\u00fc" + "C");
、オリジナルの名前の文字列として表示されます-8、getBytesメソッドを呼び出し、 は適切なエンコーディング識別子をパラメータとして指定します。 getBytesメソッドは、UTF-8形式のバイト配列を返します。非Unicodeバイトの配列から Stringオブジェクトを作成するには、encodingパラメータを使用してString コンストラクタを呼び出します。これら 呼び出しを行うコードをtryブロックで囲まれている、場合に指定されたエンコーディングが サポートされていない:
try { byte[] utf8Bytes = original.getBytes("UTF8"); byte[] defaultBytes = original.getBytes(); String roundTrip = new String(utf8Bytes, "UTF8"); System.out.println("roundTrip = " + roundTrip); System.out.println(); printBytes(utf8Bytes, "utf8Bytes"); System.out.println(); printBytes(defaultBytes, "defaultBytes"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); }
StringConverterプログラムは、重要なポイントを示すためutf8Bytesの値と defaultBytesアレイをプリントアウトします。 の長さは、変換されたテキストがソースの長さと同じではない場合があります。 テキスト。いくつかのUnicode文字は1バイトに変換され、他の文字は ペアまたは3連のバイトに変換されます。 printBytesメソッドは、ソースファイル UnicodeFormatter.javaで定義されているbyteToHexメソッドを呼び出して、バイト配列を表示します。次はprintBytesメソッドです。
printBytesメソッドの出力は次のとおりです。のみ 最初と最後のバイト、AとCの文字があります、両方の配列に同じです。
utf8Bytes[0] = 0x41 utf8Bytes[1] = 0xc3 utf8Bytes[2] = 0xaa utf8Bytes[3] = 0xc3 utf8Bytes[4] = 0xb1 utf8Bytes[5] = 0xc3 utf8Bytes[6] = 0xbc utf8Bytes[7] = 0x43 defaultBytes[0] = 0x41 defaultBytes[1] = 0xea defaultBytes[2] = 0xf1 defaultBytes[3] = 0xfc defaultBytes[4] = 0x43
- 1. Lua - 文字列に有効な文字が含まれていることを確認してください
- 2. QtでUTF-8文字列が有効であることを確認してください
- 3. JSONPath文字列がC#で有効であることを確認してください
- 4. 文字列が数字であることを確認してください
- 5. 文字の値が有効なRオブジェクト名であることを確認してください
- 6. WooCommerce:クーポンが有効であることを確認してください
- 7. BitmapDataが有効であることを確認してください
- 8. 画像が有効であることを確認してください
- 9. 有効なディレクトリ名の文字列を確認してください
- 10. PHP - 文字列の文字数が4文字未満であることを確認してください。
- 11. PHP:指定された文字列が有効な数値であることを確認してください
- 12. 配列内の文字が特定の文字であることを確認してください
- 13. Moment.jsで有効なhh:mmフォーマットを確認してください
- 14. PHPでutf8でエンコードされた文字列を比較する
- 15. 文字ループの文字列を確認してください
- 16. SwiftでNSFontが太字であることを確認してください
- 17. デフォルトのadmin $共有がServerNameで有効になっていることを確認してください
- 18. Parsley.jsカスタムバリデータで文字列を確認してください
- 19. Ouathトークンが無効であることを確認してください。
- 20. 正確な部分文字列が文字列内にあるかどうか確認してください。
- 21. Jinja2で配列が空であることを確認してください
- 22. 文字列の長さを確認してください -
- 23. バッチスクリプトで文字列変数が空であることを確認してください
- 24. Laravel検証で文字列が "0"であることを確認してください
- 25. ファイルがSQLCipher暗号化付きの有効なSQLiteデータベースであることを確認してください
- 26. ファイルが有効なPGM暗号化ファイルであることを確認してください
- 27. Android:ファイルが有効なSQLiteデータベースであることを確認してください
- 28. C++:文字列が "strtol"を使用する有効な整数かどうか確認してください
- 29. Ionic Configファイルの解析エラー。それが有効であることを確認してくださいJSON
- 30. Ember受け入れテスト:そのボタンが有効であることを確認してください
あなたは[]が有効にエンコードされたバイトを意味ですか? – bestsss
最も簡単なことは、デコードして再度エンコードすることです。あなたも同じことを確認してください。ほとんどの場合、これは正しいでしょう。 –
@Peterは動作しません。なぜなら、いくつかの文字は異なるバイトシーケンスでエンコードされる可能性があるからです。両方のバイトのシーケンスは正確で、同じ文字をエンコードしますが、バイトは異なります。 – Jesper