加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 多个Unicode阻止错误

发布时间:2020-12-15 02:13:34 所属栏目:Java 来源:网络整理
导读:所以我一直在努力帮助我完成一些数学和显示工作,一切都运行良好,但对于控制台输出,我需要能够显示Unicode上标和下标.我最初使用以下函数设置上标: public static String getBase( int num ){ String uniStr = "u207"; String numStr = Integer.toString(n
所以我一直在努力帮助我完成一些数学和显示工作,一切都运行良好,但对于控制台输出,我需要能够显示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;
}

但现在我得到了输出:

123???????

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

123???????

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

附:我将Eclipse中的运行配置设置为UTF-8,并支持所有这些字符

解决方法

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

第一个我发现感谢挖掘他的第二个评论中提供的链接,并继续通过链接狂欢的方式蠕动我的方式.
在这个answer by erickson(基于this的“Edward Grech”)中,解释了你可以将一个名为JAVA_TOOL_OPTIONS的环境变量设置为java -Dfile.encoding = UTF-8 … com.x.Mainin以获取Eclipse如果您只打算在本地运行它并且不需要构建要共享的项目,则控制台正常工作.不理想,但它的工作原理.但是不支持,所以你冒一些风险.

第二个稍微用户友好,发现here,“蜘蛛”的回答.这也使用-Dfile,但是在命令行中而不是将其设置为环境变量,这意味着您可以创建一个整洁的小批处理文件并使用命令chcp 65001将Windows控制台的默认代码页设置为65001(Unicode).

C:&;chcp 65001
C:&;java -jar -Dfile.encoding=UTF-8 path/to/your/runnable/jar

^控制台输入,引自“蜘蛛”.这基本上是你修改并添加到用于在cmd中运行jar的run.bat的内容.

第三个是在this page,由“McDowell”发布,位于最底层

Printing characters as UTF-8

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读