0

嗨,我想将 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();
}
4

3 回答 3

0

StringJava 中的 a 视为独立于任何字符编码的字符序列。因此,谈论更改 a 的编码是没有意义的String

只有在字符和字节之间进行转换时,字符编码才会发挥作用。这通常发生在您从/向一个Stream字节(例如文件)读取或写入字符时。如果您没有明确指定编码,则会使用平台编码。

如果遇到困难,请确保您的平台编码设置正确或明确指定正确的编码。

于 2013-10-24T08:07:54.413 回答
0

关键是您正在为单个字符指定代码点,但您使用该代码点作为String对象的输入,因此 Java 将其解释为 6 个单独的字符。针对您的具体问题试试这个:

StringBuilder sb = new StringBuilder();
sb.append('\u20BA');
System.out.println(sb.toString());

请注意,Unicode 值是在单引号中 - 单个字符值。正如您可能已经猜到的那样,您可以继续以这种方式附加其他 Unicode 值来创建字符串……但是,正如已经提到的,这可能不是您正在处理的任何潜在问题的最佳答案。

于 2013-10-25T02:03:22.497 回答
0

里拉符号(u+ 20BA ) 创建于 2012 年,CP1254ISO-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
?
于 2016-01-28T20:57:44.817 回答