JAVAで文字列の文字コードが分からない時に
文字コードを調べるにはどうしたら良いでしょうか?
としたら、"SJIS"が返って来るようにしたいです。
コメント

- 3:ゲスト (質問者)
- 2007/08/06 22:15
返信ありがとうございます!
hasekenさんのソースコードで問題無く動きました。
Shift_JISとJISのみ正常ですか・・・
実はWindows上のファイルしか試していないんですが、
そうなると"JISAutoDitect"を使っているhasekenさんのソースコードも
同じバグを抱えているんでしょうか・・・?

- 4:ApplePedlar
- 2007/08/07 10:44
hasekenさんのコードでもEUC-JPの「ソースカツ丼」は正常に認識できません。これはEUC-JPの「ソースカツ丼」はShift_JISの「・ス。シ・ケ・ォ・トミァ」に対応しているからである意味正常ではあるのですが、例えば秀丸エディタの文字コード自動認識機能だと正常に認識されます。
例えばShift_JISで認識したときに半角カナばかりで「・」や「。」が頻繁に混ざっているような場合や、EUC-JPで認識したときに全角カナが連続するような場合にはEUC-JPとして認識するというようなロジックがあると判別の精度は上がりそうです。

- 6:ゲスト
- 2007/09/25 16:48
Javaですべての文字コードはUNICODEになっています。
String().getBytesはUnicodeを指定したbyte配列を取得する関数です。
前へ 1 次へ![]()
コメントする
[block]から[/block]までの範囲はブロック表示されます。
部分的に目立たせたい時や、引用などにお使いください。
[code]から[/code]までの範囲は等幅表示されます。
ソースコードや設定ファイルの記述などにお使いください。






java.io.InputStreamReaderのコンストラクタの引数のString charsetNameに"JISAutoDetect"を入れることで一応自動認識するらしいですが、実際にやってみたところやはりうまくいきませんね。
java.io.BufferedReader;
java.io.ByteArrayInputStream;
java.io.InputStream;
java.io.InputStreamReader;
class Test {
public static void main(String[] args) throws Exception {
String src = "ソースカツ丼";
String[] encoding = new String[] { "Shift_JIS", "EUC-JP", "UTF-8", "JIS" };
for (int i = 0; i < encoding.length; i++) {
byte[] b = new String(src).getBytes(encoding[i]);
InputStream is = new ByteArrayInputStream(b);
InputStreamReader isr = new InputStreamReader(is, "JISAutoDetect");
BufferedReader in = new BufferedReader(isr);
String s = in.readLine();
System.out.println(encoding[i] + ": " + s);
}
}
-日本語文字コードの判別 http://www.gprj.net/dev/tips/other/kanji.shtml
http://www.ingrid.org/java/jserv/i18n/corruptedchar.html
import
import
import
import
public
}
結果:Shift_JISとJISのみ正常
■G-PROJECT■
ServletとJSPにおける文字化けについて
↑このあたりを参考にして判別コードを書くしかないのかもしれません。