将UTF-8转换为Shift-JIS

时间:2018-08-15 06:56:34

标签: java utf-8 character-encoding shift-jis

我已经编写了简单的转换代码,可以从UTF-8转换为日语字符。

    private static String convertUTF8ToShiftJ(String uft8Strg) {
        String shftJStrg = null;
        try {

            byte[] b = uft8Strg.getBytes(UTF_8);
            shftJStrg = new String(b, Charset.forName("SHIFT-JIS"));
            logger.info("Converted to the string :" + shftJStrg);
        } catch (Exception e) {
            e.printStackTrace();
            return uft8Strg;
        }
        return shftJStrg;
    }

但是它给出了输出错误,

convertUTF8ToShiftJ START !!
uft8Strg=*** abc000.sh ����started�
*** abc000.sh ��中�executing...�
*** abc000.sh ����ended��*

有人知道我犯了错误或需要其他逻辑的地方,真的很有帮助!

2 个答案:

答案 0 :(得分:2)

String已经是String,因此您的方法是“错误的”。 UTF8是一种byte[]编码,可以在Java中转换为String

它应显示为:

private static byte[] convertUTF8ToShiftJ(byte[] uft8) {

如果要将UTF8 byte[]转换为JIS byte[]

private static byte[] convertUTF8ToShiftJ(byte[] uft8) {
    String s = new String(utf8, StandardCharsets.UTF_8);
    return s.getBytes( Charset.forName("SHIFT-JIS"));
}

String之后可以将byte[]转换为mystring.getBytes(encoding)

有关更多详细信息,请参见The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)

答案 1 :(得分:2)

似乎您对String编码有概念上的误解。 例如,请参见Byte Encodings and Strings

String从一种编码转换为另一种编码是没有意义的, 因为String是与编码无关的东西。

但是,String可以用各种编码的字节数组表示 (例如UTF-8或Shift-JIS)。 因此,转换UTF-8编码的 byte数组是有意义的 到Shift-JIS编码的字节数组

private static byte[] convertUTF8ToShiftJ(byte[] utf8Bytes) throws IllegalCharsetNameException  {
    String s = new String(utf8Bytes, StandardCharsets.UTF_8);
    byte[] shftJBytes = s.getBytes(Charset.forName("SHIFT-JIS"));
    return shftJBytes;
}