

初歩的な質問です。私持っている現在の元のファイルはSJISです。それで、Linux画面で日本語の漢字を表示したいんです。  
自分が書いた現在のJavasソースコードは：

[code]

    private static String convertUTF8ToShiftJ(String uft8Strg) {
        String is = null;
        String shftJStrg = null;
    
        try {
            byte[] bt = uft8Strg.getBytes(StandardCharsets.UTF_8);
            is = new String(bt, "SHIFT-JIS");
            shftJStr = new String(is);
            logger.info("Converted to the string :" + shftJStrg);
            System.out.println(shftJStrg);
        } catch (Exception e) {
            e.printStackTrace();
            return uft8Strg;
        }
    
        return shftJStrg;
    }
    
[/code]

で、Linux画面で表示された結果は：

[code]

    *** UX0025.SH ﾂ開ﾂ始ﾂ　ﾂ（startedﾂ）
    *** UX0025.SH ﾂ偲�ﾂ行ﾂ陳�ﾂ（executing...ﾂ）
    *** UX0025.SH ﾂ終ﾂ猟ｹﾂ　ﾂ（endedﾂ　ﾂ）
    
[/code]

ただ、実際に表示したい結果は：

[code]

    *** UX0025.SH 開始　（started）
    *** UX0025.SH 実行中（executing...）
    *** UX0025.SH 終了　（ended　）
    
[/code]

私のコードがどこに間違っているのかよくわからなくて困っています。  
誰かがわかっている方いませんか。助かります。


CC BY-SA 4.0
2018-08-17T03:33:38.223
47576
2018-08-17T08:34:19.107
2018-08-17T06:04:04.813
2383
29756
question
java
Java でShift-JIS からUTF-8へ変換する方法


提示されている `convertUTF8ToShiftJ()` は、Unicodeの文字列を入力として、それを UTF-8
のバイト列にエンコードし、それをシフトJISとして無理やりデコードしてUnicodeに戻しています。ASCII以外の文字は壊れるでしょう。

Javaの`String`は常にUnicodeですので、

  * ファイルを読むときにストリームをシフトJISとしてデコードするよう指定する
  * ファイル出力や画面出力のときにストリームにUTF-8としてエンコードするよう指定する

以上で期待する動作になると思われます。


CC BY-SA 4.0
2018-08-17T08:34:19.107
47585
2018-08-17T08:34:19.107
3475
47576
answer