Convert UTF-8 to Shift-JIS

CabNt picture CabNt · Aug 15, 2018 · Viewed 7.4k times · Source

I have written the simple conversion code to convert to Japanese character from 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;
    }

But it gives the output error,

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

Do anybody have any idea that where I made a mistake or need some additional logic, it would be really helpful!

Answer

Rob Audenaerde picture Rob Audenaerde · Aug 15, 2018

You String is already a String, so your method is "wrong". UTF8 is an encoding that is a byte[] and can be converted to a String in Java.

It should read:

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

If you want to convert UTF8 byte[] to JIS byte[]:

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

A String can be converted to a byte[] later, by mystring.getBytes(encoding)

Please see The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!) for more detail.