代码之家  ›  专栏  ›  技术社区  ›  Aadith Ramia

查找非英语字符的Unicode

  •  4
  • Aadith Ramia  · 技术社区  · 15 年前

    我必须在Java程序中打印一个非英语字符串。我带着绳子。如何获取其组成字符的Unicode以便将字符串嵌入到程序中?

    4 回复  |  直到 15 年前
        1
  •  3
  •   Ondra Žižka David Lilljegren    15 年前

    在哪个代码页中有这个字符串?Java源可以在任何编码中,因此可以将该字符串放在源代码中,并使用编译器的选项来设置代码页。请参见NetBeans->项目节点->属性->源->编码。

        2
  •  2
  •   McDowell rahul gupta    15 年前

    源文件正在使用“macroman”进行编码(在项目属性-资源-文本文件编码中找到)。我将它改为“utf-8”,然后尝试将实际的非英语字符串嵌入到程序中,并尝试打印。它奏效了。

    您可能在保存或编译期间损坏了数据。源代码不携带任何内部编码信息,因此很容易损坏包含基本“ascii”范围之外字符的字符串文本。考虑使用 Unicode escape sequences 以避免此问题。 您要么这样做,要么确保任何接触到源代码的人都能始终正确地处理它——第一种方法更简单。

    如果这是用于商业应用程序,请考虑将字符串外部化为资源文件。

        3
  •  1
  •   Sean Owen    15 年前

    正如前面的答案所说,您一定可以直接在源文件中编写包含传统的ISO-8859-1或US-ASCII字符集无法编码的字符的字符串。您需要确保您的IDE将文件保存为UTF-8。而且,您可能需要在javac命令中添加“-encoding utf-8”,以确保javac正确地读取它。

    但我认为您想知道如何使用“uxxxx”语法嵌入字符串,也许是为了避免源文件编码的任何问题。这段简短的代码片段可能对您有用;它粗略地假设任何UTF-16值超过255的字符都需要转义。

    public static void main(String[] args) {
      String s = args[0];
      for (int i = 0; i < s.length(); i++) {
        char c = s.charAt(i);
        int value = (int) c;
        if (value < 256) {
          System.out.print(c);
        } else {
          System.out.print("\\u" + Integer.toHexString(value));
        }
      }
    }
    
        4
  •  0
  •   Ignacio Vazquez-Abrams    15 年前
    python -c "print repr('text goes here'.decode('utf-8'))"
    

    可能并不总是这样 'utf-8' 但这是一个理智的起点。