0

我已经编写了简单的转换代码来从 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��*

有没有人知道我在哪里犯了错误或需要一些额外的逻辑,这真的很有帮助!

4

2 回答 2

2

您似乎对字符串编码有概念上的误解。参见例如字节编码和字符串

将 aString从一种编码转换为另一种编码没有意义,因为它是独立于编码String的事情。

但是,aString可以用各种编码的字节数组表示(例如 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;
}
于 2018-08-15T07:58:42.357 回答
2

String已经是一个String,所以你的方法是“错误的”。UTF8 是一种编码,它是 abyte[]并且可以String在 Java 中转换为 a。

它应该是:

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"));
}

AString可以转换为byte[]以后,通过mystring.getBytes(encoding)

有关更多详细信息,请参阅每个软件开发人员绝对、肯定必须了解 Unicode 和字符集(没有借口!)的绝对最低要求

于 2018-08-15T07:35:12.030 回答