私は "ñ"文字を含む文字列を持っていますが、それにはいくつか問題があります。この文字列をUTF-8エンコーディングにエンコードする必要があります。私はこの方法でそれを試してみましたが、うまくいきません。
byte ptext[] = myString.getBytes();
String value = new String(ptext, "UTF-8");
どうやってその文字列をutf-8にエンコードするのですか?
JavaのString
オブジェクトは、変更できないUTF-16エンコーディングを使用します。
異なるエンコーディングを持つことができる唯一のものはbyte[]
です。あなたがUTF-8データを必要とするのであれば、あなたはbyte[]
が必要です。予期しないデータを含むString
がある場合、問題は初期の段階でバイナリデータを誤ってString
に変換していたことです(つまり、間違ったエンコードを使用していました)。
使い方はどうですか
ByteBuffer byteBuffer = StandardCharsets.UTF_8.encode(myString)
byte[] ptext = String.getBytes("UTF-8");
の代わりにgetBytes()
を使用してください。 getBytes()
はいわゆる "デフォルトエンコーディング"を使用します。これはUTF-8ではないかもしれません。
Java 7では、次のものを使用できます。
import static Java.nio.charset.StandardCharsets.*;
byte[] ptext = myString.getBytes(ISO_8859_1);
String value = new String(ptext, UTF_8);
これは、getBytes(String)
よりもthrows UnsupportedEncodingException
を宣言しないという利点があります。
古いバージョンのJavaを使用している場合は、文字セット定数を自分で宣言できます。
import Java.nio.charset.Charset;
public class StandardCharsets {
public static final Charset ISO_8859_1 = Charset.forName("ISO-8859-1");
public static final Charset UTF_8 = Charset.forName("UTF-8");
//....
}
Java Stringは内部的には常にUTF-16でエンコードされていますが、実際には次のように考える必要があります。エンコードはStringとバイトの間の変換を行う方法です。
あなたがエンコーディングの問題を抱えているのであれば、あなたがStringを持っている頃には、それは修正するには遅すぎます。ファイル、DB、またはネットワーク接続からその文字列を作成する場所を修正する必要があります。
あなたはこのように試すことができます。
byte ptext[] = myString.getBytes("ISO-8859-1");
String value = new String(ptext, "UTF-8");
String value = new String(myString.getBytes("UTF-8"));
そして、あなたがエンコードされた "ISO-8859-1"でテキストファイルから読みたいならば:
String line;
String f = "C:\\MyPath\\MyFile.txt";
try {
BufferedReader br = Files.newBufferedReader(Paths.get(f), Charset.forName("ISO-8859-1"));
while ((line = br.readLine()) != null) {
System.out.println(new String(line.getBytes("UTF-8")));
}
} catch (IOException ex) {
//...
}
一瞬で私はこの問題を経験し、次のようにしてそれを解決することができました
最初にインポートする必要があります
import Java.nio.charset.Charset;
それから私はUTF-8
とISO-8859-1
を使うために定数を宣言しなければなりませんでした
private static final Charset UTF_8 = Charset.forName("UTF-8");
private static final Charset ISO = Charset.forName("ISO-8859-1");
それから私はそれを次のように使うことができます:
String textwithaccent="Thís ís a text with accent";
String textwithletter="Ñandú";
text1 = new String(textwithaccent.getBytes(ISO), UTF_8);
text2 = new String(textwithletter.getBytes(ISO),UTF_8);
エンコード形式を指定して特殊文字をエンコードするために、以下のコードを使用しました。
String text = "This is an example é";
byte[] byteText = text.getBytes(Charset.forName("UTF-8"));
//To get original string from byte.
String originalString= new String(byteText , "UTF-8");
これで私の問題は解決しました
String inputText = "some text with escaped chars"
InputStream is = new ByteArrayInputStream(inputText.getBytes("UTF-8"));