Stringオブジェクトの文字コードの変換
NewString = new String(b.getBytes("iso-8859-1"),"Shift_JIS");
でShift-Jisに変換できるとありましたが、どうも出力の
日本語部分が3Fになってしまってうまくいきません。
テスト用に以下のコードを作ってみました。
import java.io.File;
import java.io.FileWriter;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.FileOutputStream;
public class Test {
public static void main(String[] args) {
try{
String regex_title;
regex_title = "制限をしている場合";
System.out.println(getHexString(regex_title.getBytes()));
System.out.println(getHexString(regex_title.getBytes("iso-8859-1")));
regex_title = "制限をしている場合";
regex_title = getUTF8(regex_title);
System.out.println(getHexString(regex_title.getBytes()));
System.out.println(getHexString(regex_title.getBytes("iso-8859-1")));
regex_title = "制限をしている場合";
regex_title = getShiftJIS(regex_title);
System.out.println(getHexString(regex_title.getBytes()));
System.out.println(getHexString(regex_title.getBytes("iso-8859-1")));
FileOutputStream fs = new FileOutputStream("./test.txt");
fs.write(regex_title.getBytes());
fs.close();
}catch(Exception ex){
}
}
public static String getHexString(byte[] b){
String buff="";
try{
for(int i=0;i<b.length;i++)
buff += String.format("\\x%02x", b[i]);
}catch(Exception ex){
}
return buff;
}
public static String getUTF8(String b){
try {
//UTF-8へ変換
return new String(b.getBytes(), "UTF-8");
} catch (Exception e) {
e.printStackTrace();
return b;
}
}
public static String getShiftJIS(String b){
try {
//UTF-8へ変換
return new String(b.getBytes(),"Shift_JIS");
} catch (Exception e) {
e.printStackTrace();
return b;
}
}
// @Override
}
////////////////////////////////////////////////////////////
1.
System.out.println(getHexString(regex_title.getBytes("iso-8859-1")));
の部分の出力をみると3Fに変換されています。
regex_title.getBytes("iso-8859-1")の時点で3Fな事がわかります。
何故でしょうか?
私がやりたい事はStringの内部のコードをUTF8にする事です。
NewString = new String(b.getBytes("iso-8859-1"),"UTF-8");
では、出来ていないようでした。
2.
また、以下のコードを実行するとtest.txt test2.txtともに
文字コードがShiftJisで出力されるのはなぜでしょうか?
変換を行わなければ内部処理形式のUnicodeで出力されるの
ではないのでしょうか?
regex_title = "制限をしている場合";
FileOutputStream fs = new FileOutputStream("./test.txt");
fs.write(regex_title.getBytes());
fs.close();
File file = new File("./test2.txt");
BufferedWriter bw = new BufferedWriter(new FileWriter(file));
bw.write(regex_title);
bw.close();
上はgetBytes()が変換してるのでしょうか?
下はBufferedWriterかFileWriterが変換してる?
ではString内部のByteをそのまま出力するにはどうしたら・・・。
お礼
お二人とも素早い回答ありがとうございました。 お陰様で理解できました、よろしくお願いします。