有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java将UTF8转换为ShiftJIS

我已经编写了从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) 个答案

  1. # 1 楼答案

    似乎您对字符串编码有概念上的误解。 例如,见Byte Encodings and Strings

    String从一种编码转换为另一种编码没有意义, 因为String是一种独立于编码的东西

    但是String可以用各种编码的字节数组表示 (例如UTF-8或Shift JIS)。 因此,转换UTF-8编码的字节数组 到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;
    }
    
  2. # 2 楼答案

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

    应改为:

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

    如果要将UTF8byte[]转换为JISbyte[]

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

    一个String可以稍后通过mystring.getBytes(encoding)转换成一个byte[]

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