【问题标题】:Convert UTF-8 to Shift-JIS将 UTF-8 转换为 Shift-JIS
【发布时间】:2018-08-15 06:56:34
【问题描述】:

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

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

【问题讨论】:

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


【解决方案1】:

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 稍后可以通过mystring.getBytes(encoding) 转换为byte[]

详情请见The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)

【讨论】:

  • 谢谢你的回答兄弟。仍然有问题,所以尝试解决问题。
【解决方案2】:

您似乎对字符串编码存在概念性误解。 参见例如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;
}

【讨论】:

  • 很好的答案:)
  • 其实,准确地说,Strings 也有内部编码(在内存中)。现在可以是LATIN1UTF-16baeldung.com/java-9-compact-string。但是在处理 IO 时,最好始终使用标准字符集显式编码为字节。
  • 非常感谢您指出我的概念误解。但仍然有同样的问题。现在,尝试做一些额外的改变。
猜你喜欢
  • 2022-07-01
  • 2021-05-29
  • 2016-09-06
  • 2014-05-02
  • 2017-07-21
  • 1970-01-01
  • 2015-09-21
  • 1970-01-01
相关资源
最近更新 更多