多个Unicode块错误

时间:2016-03-17 08:06:17

标签: java unicode

所以我一直在努力帮助我完成一些数学和显示工作,并且一切运行良好,但对于控制台输出,我需要能够显示Unicode上标和下标。我最初使用以下函数设置了上标​​:

public static String getBase( int num ){
    String uniStr = "\\u207";
    String numStr = Integer.toString(num);
    String res = "";

    for( int i = 0; i < numStr.length(); i++ ){ 
        String s = uniStr + numStr.charAt(i);
        char c = (char) Integer.parseInt( s.substring(2), 16 );
        res += c;
    }
    return res;
}

在某种程度上工作正常,但在使用以下调用进行调试时:

System.out.println(Unicode.getBase(1234567890));

我得到了输出:

ⁱ⁲⁳⁴⁵⁶⁷⁸⁹⁰

由于1,2和3的上标在Latin1-Supplement unicode块中具有远远不同的unicode ID,而不是与其他字符在上标/下标块中。所以我添加了一个switch语句,试图专门处理这3个,结果是:

public static String getBase( int num ){
    String uniStr = "\\u207";
    String numStr = Integer.toString(num);
    String res = "";
    for( int i = 0; i < numStr.length(); i++ ){ 

        String s = "";
        switch(numStr.charAt(i))
        {
        case '1':
            s = "\\u00B9";
            break;
        case '2':
            s = "\\u00B2";
            break;
        case '3':
            s = "\\u00B3";
            break;
        default:    
            s = uniStr + numStr.charAt(i);
        }

        char c = (char) Integer.parseInt( s.substring(2), 16 );
        res += c;
    }
    return res;
}

然而现在我得到了输出:

¹²³⁴⁵⁶⁷⁸⁹⁰

除了现在只有1,2和3显示在控制台中,4-0都有无效的字符框,如:

¹²³ࢆࢆࢆࢆࢆࢆࢆ

我知道交换机工作的事实,正如1,2和3所证明的那样都正确显示,并且其他字符的字符串解析也有效,但这仍然会发生。对于我的生活,我无法找到解决方案甚至是理由。如果我使用一个Unicode块中的字符,它是否也试图从该范围中获取所有其他字符,如果是这样,我可以做些什么呢?这似乎是我能想到的唯一可能的原因,否则我很好并且真正难倒。任何和所有的帮助将非常感激。

P.S。我将Eclipse中的运行配置设置为UTF-8并支持所有这些字符

1 个答案:

答案 0 :(得分:0)

对于任何好奇的人来说,“LưuVĩnhPhúc”是正确的,因为它是一个问题,Windows控制台在unicode方面相当......不友好。肯定有温度修复,但没有什么特别令人愉快的。

第一次我发现感谢他挖掘了他第二条评论中提供的链接,然后继续通过链接疯狂地穿过互联网。 这个answer由erickson(基于this一个“ Edward Grech ”)解释为您可以将名为JAVA_TOOL_OPTIONS的环境变量设置为{ {1}}如果您只打算在本地运行它并且不需要构建要共享的项目,那么为了使 Eclipse 控制台正常工作。不理想,但它的工作原理。但是不支持,所以你冒一些风险。

第二个稍微提高了用户友好性,找到了here,“ spider ”的答案。这也使用java -Dfile.encoding=UTF-8 … com.x.Main,但在命令行中而不是将其设置为环境变量,这意味着您可以创建一个整洁的小批处理文件并使用命令-Dfile来设置Windows控制台的默认代码页至 65001 (Unicode)。

chcp 65001

^控制台输入,引自“ spider ”。这基本上是您修改​​并添加到用于在cmd中运行jar的run.bat。

第三个位于this page,由“ McDowell ”发布,位于

下方
  

将字符打印为UTF-8

此方法涉及操纵控制台以作为文件句柄工作,并具有一些方便的代码片段。