Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.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,所以我一直在做一些小事情来帮助我做一些数学和显示工作,一切都很好,但是对于控制台输出,我需要能够显示Unicode上标和下标。我最初为上标设置了以下功能: public static String getBase( int num ){ String uniStr = "\\u207"; String numStr = Integer.toString(num); String res = ""; for( int i = 0; i < numStr.le

所以我一直在做一些小事情来帮助我做一些数学和显示工作,一切都很好,但是对于控制台输出,我需要能够显示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;
}
我得到了输出:

ⁱ⁲⁳⁴⁵⁶⁷⁸⁹⁰
¹²³⁴⁵⁶⁷⁸⁹⁰
由于1、2和3的上标在Latin1补充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块中的字符,它是否也试图从该范围中获取所有其他字符,如果是,我能做些什么?这似乎是我能想到的唯一可能的原因,否则我真的很难办。我们将非常感谢您的任何帮助

另外,我将Eclipse中的run Config设置为UTF-8,所有这些字符都受支持

对任何好奇的人来说,“Lưu Vĩnh Phúc”是正确的,因为它是Windows控制台的一个问题,而不是。。。在unicode方面不友好。当然有临时补丁可用,但没有特别令人愉快的

第一个我发现这要感谢他在第二条评论中提供的链接,并继续在链接狂潮中在互联网络中蠕动。 埃里克森的这篇文章(基于“爱德华·格雷奇”的一篇)据解释,如果您只计划在本地运行Eclipse控制台,而不需要构建共享项目,则可以将名为
JAVA\u TOOL\u OPTIONS
的环境变量设置为
JAVA-Dfile.encoding=UTF-8…com.x.Main
,以使其正常工作。虽然不理想,但它确实有效。但是不支持,因此您会面临一些风险

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

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

第三个已打开,由“McDowell”发布,位于下方最底部

将字符打印为UTF-8


此方法涉及操纵控制台以用作文件句柄,并包含一些方便的代码段。

问题的可能重复之处在于Windows控制台Unicode支持,而不是Java。Eclipse不需要任何特殊设置就可以使UTF-8输出正常工作。运行配置中的“Encoding”(编码)选项指示分叉进程将选择的编码。
chcp 65001
是一个bastardised UTF-8字符映射。它不支持完整的Unicode映射,输入已中断
¹²³ࢆࢆࢆࢆࢆࢆࢆ
C:\>chcp 65001
C:\>java -jar -Dfile.encoding=UTF-8 path/to/your/runnable/jar