如何将UTF-8字符转换为ISO Latin 1?

5 java character-encoding

我需要将UTF-8商标标志转换为ISO Latin 1,并将其保存到数据库中,该数据库也是ISO Latin 1编码的.

我怎么能在java中这样做?

我尝试过类似的东西

String s2 = new String(s1.getBytes("ISO-8859-1"), "utf-8");
Run Code Online (Sandbox Code Playgroud)

但它似乎不像我预期的那样工作.

Jon*_*eet 5

Java中的字符串始终使用Unicode(UTF-16,有效).只有在尝试从文本转换为二进制编码时才需要转换,反之亦然.

涉及的角色是什么?你确定它甚至出现在ISO Latin 1中吗?如果是,我希望您的数据库存储该字符没有任何问题.没有"UTF-8商标标志"这样的东西.您可以使用"表示商标符号UTF-8编码的字节",但这可能是字节数组,而不是字符串.

编辑:如果你的意思是Unicode商标字符 U + 2122,那就超出了ISO-Latin-1的范围.有注册商标字符 U + 00AE,这是不一样的(无论是在外观上还是在法律意义上,IIRC)但可能总比没有好 - 如果你想使用它,那么只需使用:

string replaced = original.replace('\u2122', '\u00ae');
Run Code Online (Sandbox Code Playgroud)

  • 但<®>和<™>具有完全不同的含义. (2认同)