Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将字符串文字unicode打印为实际字符_Java_Unicode - Fatal编程技术网

Java 将字符串文字unicode打印为实际字符

Java 将字符串文字unicode打印为实际字符,java,unicode,Java,Unicode,在我的Java应用程序中,传递给我的字符串如下所示: “\u00a5123” 在控制台中打印该字符串时,我得到与输出相同的字符串(如预期) 但是,我想通过将unicode转换成实际的日元符号(\u00a5->日元符号)来打印出来-我将如何执行此操作 i、 e.看起来是这样的:“[yen symbol]123”我写了一个小程序: public static void main(String[] args) { System.out.println("\u00a5123"); } 它的输出

在我的Java应用程序中,传递给我的字符串如下所示:

“\u00a5123”

在控制台中打印该字符串时,我得到与输出相同的字符串(如预期)

但是,我想通过将unicode转换成实际的日元符号(\u00a5->日元符号)来打印出来-我将如何执行此操作


i、 e.看起来是这样的:“[yen symbol]123”

我写了一个小程序:

public static void main(String[] args) {
    System.out.println("\u00a5123");
}
它的输出:

人民币123元

i、 它输出的正是你在帖子中所说的内容。我不确定是否还有其他事情发生。您使用的是什么版本的Java

编辑:

对于您的澄清,有两种不同的技术。最简单的方法是查找一个“\u”,后跟4个十六进制代码字符,提取该字符并用unicode版本替换为十六进制代码(使用字符类)。当然,这假定字符串前面没有\u


我不知道有哪种特定的系统能够像解析编码的Java字符串一样解析字符串。

您可能需要为这些字符串编写解析,除非您可以在第三方库中找到解析。JDK中没有任何东西可以为您解析这些,我知道,因为我最近有了一个想法,可以使用这种转义通过一个只有拉丁语1的数据库走私unicode。(顺便说一句,我最后做了别的事情)


我将告诉您,在读取和写入文件时,java.util.Properties以这种方式转义和取消转义Unicode字符(因为文件必须是ASCII)。它用于此目的的方法是私有的,因此您不能调用它们,但您可以使用JDK源代码来激发您的解决方案。

如前所述,必须解析这些字符串才能获得所需的结果

  • 使用\u作为分隔符来标记字符串。例如:
    \u63A5\u53D7=>{“63A5”,“53D7”}

  • 按如下方式处理这些字符串:

    String hex = "63A5";
    int intValue = Integer.parseInt(hex, 16);
    System.out.println((char)intValue);
    

  • 可以用以下内容替换上述内容:

    System.out.println((char)0x63A5);
    
    下面是打印所有框构建unicode字符的代码

    public static void printBox()
    {
        for (int i=0x2500;i<=0x257F;i++)
        {
            System.out.printf("0x%x : %c\n",i,(char)i);
        }
    }
    
    publicstaticvoid打印框()
    {
    
    for(int i=0x2500;iYou说直接打印字符串将获得正确的输出是正确的。但是,有人向我传递了一个本质上是转义的字符串。因此,假设主方法仍然存在,但您调用了一个名为foo的方法,如下所示:foo(\\u00a5123”);反斜杠转义是只有Java编译器才需要处理的事情,而不是JVM或API。因此,发现在运行时没有一种简单的方法来解析此类字符串并不奇怪。@Todd同意-关于我唯一能想到的另一件事是尝试以某种方式使用编译器-但这听起来像是麻烦le对我来说。那么,为了更好地了解问题空间,是否没有办法获得一个合适的unicode字符串?使用的是什么上下文?时间/速度是否是一个重要的考虑因素?还有,是否有任何简化的假设?例如,这是唯一一次“\u#####”吗会发生吗?因为这样您就可以使用正则表达式来提取数字。当通过groovy运行java程序时,可能需要重复此操作,因为groovy对
    $
    的解释不同。因此我使用
    System.out.println(“\u0024”)
    有点复杂,但您可能会将字符串作为值发送到内存中的属性文件,然后使用
    属性
    类读取它。