首页 > 解决方案 > ConEmu (CMD) 不能识别这些 un​​icode 字符?

问题描述

public void print(boolean nextLine, int delayInt, String load) throws UnsupportedEncodingException {
    PrintStream p = new PrintStream(System.out, true,"UTF-8");
    for(int x = 0; x < load.length(); x++ ){
        p.print(load.charAt(x));
        try{
            Thread.sleep(delayInt);
        }catch (Exception ex){
            ex.printStackTrace();
        }
    }
    if(nextLine)
        System.out.println();
}

好吧,上面是打印字符串中每个字符的方法,我正在使用 PrintStream 因为我觉得它允许我在 ConEmu 中编译和执行 Java 程序时使用所有 Unicode 字符(我使用它而不是 CMD @Windows )

i.print(true, 50,"\n" +
            "\n" +
            "▓█████▄         ██▓         ██████         ▄████▄          ▒█████          ██▒   █▓       ▓█████         ██▀███         \n" +
            "▒██▀ ██▌       ▓██▒       ▒██    ▒        ▒██▀ ▀█         ▒██▒  ██▒       ▓██░   █▒       ▓█   ▀        ▓██ ▒ ██▒       \n" +
            "░██   █▌       ▒██▒       ░ ▓██▄          ▒▓█    ▄        ▒██░  ██▒        ▓██  █▒░       ▒███          ▓██ ░▄█ ▒       \n" +
            "░▓█▄   ▌       ░██░         ▒   ██▒       ▒▓▓▄ ▄██▒       ▒██   ██░         ▒██ █░░       ▒▓█  ▄        ▒██▀▀█▄         \n" +
            "░▒████▓        ░██░       ▒██████▒▒       ▒ ▓███▀ ░       ░ ████▓▒░          ▒▀█░         ░▒████▒       ░██▓ ▒██▒       \n" +
            " ▒▒▓  ▒        ░▓         ▒ ▒▓▒ ▒ ░       ░ ░▒ ▒  ░       ░ ▒░▒░▒░           ░ ▐░         ░░ ▒░ ░       ░ ▒▓ ░▒▓░       \n" +
            " ░ ▒  ▒         ▒ ░       ░ ░▒  ░ ░         ░  ▒            ░ ▒ ▒░           ░ ░░          ░ ░  ░         ░▒ ░ ▒░       \n" +
            " ░ ░  ░         ▒ ░       ░  ░  ░         ░               ░ ░ ░ ▒              ░░            ░            ░░   ░        \n" +
            "   ░            ░               ░         ░ ░                 ░ ░               ░            ░  ░          ░            \n" +
            " ░                                        ░                                    ░                                        \n" +
            "\n"
    );
    i.print(true, 2, "\n" +
            "\n" +
            " ▄█         ▄████████                                                                                                                                       \n" +
            "███        ███    ███                                                                                                                                       \n" +
            "███▌       ███    ███                                                                                                                                       \n" +
            "███▌       ███    ███                                                                                                                                       \n" +
            "███▌     ▀███████████                                                                                                                                       \n" +
            "███        ███    ███                                                                                                                                       \n" +
            "███        ███    ███                                                                                                                                       \n" +
            "█▀         ███    █▀                                                                                                                                        \n" +
            "                                                                                                                                                            \n" +
            " ▄█   ▄█   ▄█      ▀█████████▄         ▄████████      ▄█       ▄████████        ▄█   ▄█▄      ▄█   ▄█   ▄█                                                  \n" +
            "███  ███  ███        ███    ███       ███    ███     ███      ███    ███       ███ ▄███▀     ███  ███  ███                                                  \n" +
            "███▌ ███▌ ███▌       ███    ███       ███    ███     ███▌     ███    █▀        ███▐██▀       ███▌ ███▌ ███▌                                                 \n" +
            "███▌ ███▌ ███▌      ▄███▄▄▄██▀       ▄███▄▄▄▄██▀     ███▌     ███             ▄█████▀        ███▌ ███▌ ███▌                                                 \n" +
            "███▌ ███▌ ███▌     ▀▀███▀▀▀██▄      ▀▀███▀▀▀▀▀       ███▌     ███            ▀▀█████▄        ███▌ ███▌ ███▌                                                 \n" +
            "███  ███  ███        ███    ██▄     ▀███████████     ███      ███    █▄        ███▐██▄       ███  ███  ███                                                  \n" +
            "███  ███  ███        ███    ███       ███    ███     ███      ███    ███       ███ ▀███▄     ███  ███  ███                                                  \n" +
            "█▀   █▀   █▀       ▄█████████▀        ███    ███     █▀       ████████▀        ███   ▀█▀     █▀   █▀   █▀                                                   \n" +
            "                                      ███    ███                               ▀                                                                            \n" +
            " ▄█   ▄█   ▄█      ▀█████████▄         ▄████████        ▄████████        ▄████████        ▄█   ▄█▄        ▄████████        ▄████████      ▄█   ▄█   ▄█      \n" +
            "███  ███  ███        ███    ███       ███    ███       ███    ███       ███    ███       ███ ▄███▀       ███    ███       ███    ███     ███  ███  ███      \n" +
            "███▌ ███▌ ███▌       ███    ███       ███    ███       ███    █▀        ███    ███       ███▐██▀         ███    █▀        ███    ███     ███▌ ███▌ ███▌     \n" +
            "███▌ ███▌ ███▌      ▄███▄▄▄██▀       ▄███▄▄▄▄██▀      ▄███▄▄▄           ███    ███      ▄█████▀         ▄███▄▄▄          ▄███▄▄▄▄██▀     ███▌ ███▌ ███▌     \n" +
            "███▌ ███▌ ███▌     ▀▀███▀▀▀██▄      ▀▀███▀▀▀▀▀       ▀▀███▀▀▀         ▀███████████     ▀▀█████▄        ▀▀███▀▀▀         ▀▀███▀▀▀▀▀       ███▌ ███▌ ███▌     \n" +
            "███  ███  ███        ███    ██▄     ▀███████████       ███    █▄        ███    ███       ███▐██▄         ███    █▄      ▀███████████     ███  ███  ███      \n" +
            "███  ███  ███        ███    ███       ███    ███       ███    ███       ███    ███       ███ ▀███▄       ███    ███       ███    ███     ███  ███  ███      \n" +
            "█▀   █▀   █▀       ▄█████████▀        ███    ███       ██████████       ███    █▀        ███   ▀█▀       ██████████       ███    ███     █▀   █▀   █▀       \n" +
            "                                      ███    ███                                         ▀                                ███    ███                        \n" +
            " ▄█   ▄█   ▄█         ▄████████        ▄████████     ████████▄       ███    █▄         ▄████████      ▄█            ▄█   ▄█   ▄█                            \n" +
            "███  ███  ███        ███    ███       ███    ███     ███    ███      ███    ███       ███    ███     ███           ███  ███  ███                            \n" +
            "███▌ ███▌ ███▌       ███    █▀        ███    █▀      ███    ███      ███    ███       ███    █▀      ███           ███▌ ███▌ ███▌                           \n" +
            "███▌ ███▌ ███▌       ███             ▄███▄▄▄         ███    ███      ███    ███      ▄███▄▄▄         ███           ███▌ ███▌ ███▌                           \n" +
            "███▌ ███▌ ███▌     ▀███████████     ▀▀███▀▀▀         ███    ███      ███    ███     ▀▀███▀▀▀         ███           ███▌ ███▌ ███▌                           \n" +
            "███  ███  ███               ███       ███    █▄      ███    ███      ███    ███       ███    █▄      ███           ███  ███  ███                            \n" +
            "███  ███  ███         ▄█    ███       ███    ███     ███  ▀ ███      ███    ███       ███    ███     ███▌    ▄     ███  ███  ███                            \n" +
            "█▀   █▀   █▀        ▄████████▀        ██████████      ▀██████▀▄█     ████████▀        ██████████     █████▄▄██     █▀   █▀   █▀                             \n" +
            "                                                                                                     ▀                                                      \n" +
            " ▄█                                                                                                                                                         \n" +
            "███                                                                                                                                                         \n" +
            "███▌                                                                                                                                                        \n" +
            "███▌                                                                                                                                                        \n" +
            "███▌                                                                                                                                                        \n" +
            "███                                                                                                                                                         \n" +
            "███                                                                                                                                                         \n" +
            "█▀                                                                                                                                                          \n" +
            "                                                                                                                                                            \n" +
            "\n" +
            " \n");

但是在 IDE 上按预期运行,但在 ConEmu 上显示,“testing.java:50:错误:用于编码 windows-1252 的不可映射字符(0x90)”错误我已经检查了解决方案,但它们仅适用于我有'\uXXXX' 字符代码,在这种情况下我没有,因为我使用了在线 ASCII 艺术生成器。 我用过的 ASCII ART Generator

标签: javaconemu

解决方案


根据ConEmu 文档

UTF-8 (UTF8)

在 Windows 上,与 Unix 不同,控制台本身不是一个“字节”流,而是一个单元格的电子表格,每个单元格都包含一个 UTF-16 字符和一个颜色属性。

这意味着如果您的应用程序使用单字节或多字节字符集(ANSI、OEM、UTF-8 和许多其他字符集)生成输出,Windows 会根据您控制台中选择的活动代码页自动将该输出转换为 UTF-16(运行chcp 从控制台命令提示符检查您的活动代码页)。

如果您想使用 UTF-8 编码,您必须选择 UTF-8 作为活动控制台代码页。只需运行 chcp 65001 命令即可。您可以从 shell 提示符调用此命令,或在 ConEmu 任务内容中的 shell 之前运行它。当然,您的应用程序必须能够使用 UTF-8 输出数据。请参阅您的应用手册。

只需输入您的 ConEmu 终端,您就可以看到 UTF-8 内容:

chcp 65001

您还必须稍微修改源代码并将其保存为 UTF-8 文件:

public void print(boolean nextLine, int delayInt, String load) throws UnsupportedEncodingException {
    for(int x = 0; x < load.length(); x++ ){

        // Use the regular System.out.print here to output chars!
        System.out.print(load.charAt(x));

        try{
            Thread.sleep(delayInt);
        }catch (Exception ex){
            ex.printStackTrace();
        }
    }
    if(nextLine)
        System.out.println();
}

编译运行脚本:

chcp 65001
java test

我在 ConEmu 控制台中得到的结果: 在此处输入图像描述


推荐阅读