【问题标题】:Get Unicode Encoded Characters (Kannada Lanuguage) from given String从给定的字符串中获取 Unicode 编码字符(卡纳达语)
【发布时间】:2023-03-06 18:13:01
【问题描述】:
String s1="\u0048\u0065\u006C\u006C\u006F";   // Hello
String s2="\u0CAE\u0CC1\u0C96\u0CAA\u0CC1\u0C9F";  // ಮುಖಪುಟ (Kannada Language)

System.out.println("s1: " + StringEscapeUtils.unescapeJava(s1));  // s1: Hello
System.out.println("s2: " + StringEscapeUtils.unescapeJava(s2));  // s2: ??????

当我打印s1 时,我得到的结果是Hello。 当我打印s2 时,我得到的结果是???????

我希望s2 的输出为ಮುಖಪುಟ。我怎样才能做到这一点?

【问题讨论】:

  • 您想从哪里获得输出:在 Windows/Linux 的命令提示符或 IDE 的控制台视图上?请提及。
  • @SanjeevSaha IDE 控制台..
  • @Raedwald 不,我的问题与您提出的问题无关
  • 3 个答案中的 2 个建议正确设置字符编码。您的问题文本并未表明对字符编码对此类问题的重要性的任何认识。

标签: java spring-mvc unicode unicode-string


【解决方案1】:
 ByteArrayOutputStream os = new ByteArrayOutputStream();
 PrintStream ps = new PrintStream(os);
 ps.println("\u0048\u0065\u006C\u006C\u006F \u0CAE\u0CC1\u0C96\u0CAA\u0CC1\u0C9F");  
 String output = os.toString("UTF8");
 System.out.println("result: "+output);   //  Hello ಮುಖಪುಟ 

【讨论】:

    【解决方案2】:

    问题很可能是System.out 没有准备好处理Unicode。它是一个以所谓的默认编码编码的输出流。

    默认编码通常是(即在 Windows 上)一些专有的 8 位字符集,根本无法处理 unicode。

    我的提示:为了测试,请使用 UTF-8 编码创建您自己的 PrintStream 或 PrintWriter。

    【讨论】:

    • 是的,我检查 PrintStream 及其打印是否正确。 PrintStream printStream = new PrintStream(System.out, true, "UTF-8"); printStream.println("\u0CAE\u0CC1\u0C96\u0CAA\u0CC1\u0C9F");如何将打印值分配给字符串?
    • @Chetan String foo = "\u0CAE\u0CC1\u0C96\u0CAA\u0CC1\u0C9F";怎么样?
    • 它在控制台中与 PrintStream 一起使用,但是当我将其发送到浏览器时,它会像 ??????? 一样打印。
    • 如果您原来的问题得到解决,请提出一个新问题。 cmets中没有后续问题。并确保解释“发送到浏览器”的实际含义。
    • 我会加你+1,一旦我达到15个声望;)
    【解决方案3】:

    如果您使用的是Eclipse,请查看:https://decoding.wordpress.com/2010/03/18/eclipse-how-to-change-the-console-output-encoding/

    请在控制台简单输出如下:-

    String s1="\u0048\u0065\u006C\u006C\u006F";   
    String s2="\u0CAE\u0CC1\u0C96\u0CAA\u0CC1\u0C9F";
    System.out.println("s1: " + s1);  // s1
    System.out.println("s2: " + s2);  // s2
    

    希望对你有帮助。

    【讨论】:

    • 是的,我试过这个,只适用于 s1(英语),它不适用于 s2(卡纳达语),输出与???????相同。
    【解决方案4】:

    您需要添加“UTF-8”之类的编码 试试这个

    String s1="\u0048\u0065\u006C\u006C\u006F";   // Hello
    String s2="\u0CAE\u0CC1\u0C96\u0CAA\u0CC1\u0C9F";  // ಮುಖಪುಟ (Kannada Language)
    
    System.out.println("s1: " + new String(s1.getBytes("UTF-8"), "UTF-8"));
    System.out.println("s2: " + new String(s2.getBytes("UTF-8"), "UTF-8"));
    

    【讨论】:

    • @SantoshJadi 你能告诉我确切的代码和输出吗?
    • 我还没有开始实施,只是为了练习。我只是想知道,为什么这不适用于其他语言。
    • 这行不通,因为new String(s2.getBytes("UTF-8"), "UTF-8") 实际上是一个 NOP。
    • @Igoranze 但我希望System.out.println("s2: " + s2); 也能正常工作......
    • @piet.t 不同之处在于 Unicode“UTF-8”,而普通字符串使用“UTF-16”,新字符串预计使用“UTF-8”。有关差异的更多信息,请参阅此链接。 stackoverflow.com/a/496361/4985572
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-21
    • 1970-01-01
    • 1970-01-01
    • 2012-02-10
    • 2010-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多