2016-08-01 10 views
0

テキストをBase64 byteArrayに問題なく変換しました。残念ながら、変換された文字列は "PD"で始まる必要があります。つまり、BOMを使用せずにBOMでUTF-8にエンコードする必要があります。私はいくつかのコードとネット上のすべてを始めた。しかし、私は成功することができませんでした。どんな助けもありがとうございます。BomなしでUTF-8で文字列をbyteArrayに変換する方法

ありがとうございました。

よろしくアルパース

public static byte[] convertToByteArray(String strToBeConverted) { 
    return strToBeConverted.getBytes(StandardCharsets.UTF_8); 
} 
+0

http://stackoverflow.com/questions/1835430/byte-order-mark-screws-up-file-reading-in-java maybe –

+0

UTF-8 BOMは、常に2バイトです。データ。だから、変換されたデータを使用するときにそれらを切り捨てたり、スキップしたりすることができます。 –

答えて

1
return strToBeConverted.replaceFirst("^\uFEFF", "").getBytes(StandardCharsets.UTF_8); 

BOMは、Unicodeコード・ポイントU + FEFFです。

これを削除すると、まずそれが実際に存在するかどうかを確認することになります。 String.replaceFirstは、正規表現のマッチングを使用するのでコストがかかりますが、ここでは問題ありません。

+0

私はそれを修正しました...ありがとうJoop。元のファイルは間違っていました。私はそれを修正し、あなたのコードを実行する今私はbomファイルなしでUTF8を持っています。乾杯。 – user2307786

+1

あなたが言ったように、 'replaceFirst()'は高価で、不要です。文字列内の最初のコードポイントがBOMかどうかを確認するだけで簡単です。たとえば、if((strToBeConverted.length()> 0)&&(strToBeConverted.codePointAt(0)== 0xFEFF) )strToBeConverted = strToBeConverted()。サブストリング(1); return strToBeConverted.getBytes(StandardCharsets.UTF_8); ' –

+0

@RemyLebeauがコードに感謝します。 'charAt'も可能ですが、最近ではコードポイントがより論理的な選択肢になっています。注意(読者向け):部分文字列はchar配列の内容のコピーを作成しないので、高速で高価ではありません。 –

関連する問題