嗨,我想将unicode值“\ u20BA”转换为土耳其语等效字符串。请有人帮帮我吗?
我使用了以下代码:
try {
String string = "\u20BA";
System.out.println(string + " " + string.toLowerCase());
// Locale.setDefault(new Locale("tr"));
// Locale tr = new Locale("TR","tr");
byte[] converttoBytes = string.toLowerCase().getBytes("UTF-8");
string = new String(converttoBytes, "Cp1254");
System.out.println(string + " " + string.toLowerCase());
} catch (Exception e) {
e.printStackTrace();
}
答案 0 :(得分:0)
将Java中的String
视为独立于任何字符编码的字符序列。因此,谈论改变String
的编码是没有意义的。
只有在字符和字节之间进行转换时才会出现字符编码。当您从/ Stream
个字节(例如文件)读取或写入字符时,通常会发生这种情况。如果未明确指定编码,则使用平台编码。
如果遇到困难,请确保正确设置平台编码或明确指定正确的编码。
答案 1 :(得分:0)
关键是您要为单个字符指定代码点,但是您使用该代码点作为String
对象的输入,因此Java将其解释为6个单独的字符。请针对您的具体问题尝试此操作:
StringBuilder sb = new StringBuilder();
sb.append('\u20BA');
System.out.println(sb.toString());
请注意,Unicode值使用单引号 - 单个字符值。正如您可能已经猜到的那样,您可以继续以这种方式附加其他Unicode值来创建字符串......但是,正如已经提到的,这可能不是您正在处理的任何潜在问题的最佳答案。
答案 2 :(得分:0)
lira sign(u + 20BA)是在2012年创建的,CP1254和ISO-8859-9字符集都没有包含里拉标志。
这可以在Linux上使用以下命令集进行验证(u + 20BA实际上编码为utf8中的3个以下字节:E2 82 BA):
$ echo -e "\xE2\x82\xBA"
₺
$ echo -e "\xE2\x82\xBA" | iconv --from utf8 --to cp1254
iconv: illegal input sequence at position 0
$ echo -e "\xE2\x82\xBA" | iconv --from utf8 --to iso88599
iconv: illegal input sequence at position 0
$ echo -e "\xE2\x82\xBA" | iconv --from utf8 --to cp1254//TRANSLIT
?
$ echo -e "\xE2\x82\xBA" | iconv --from utf8 --to iso88599//TRANSLIT
?