“UTF-8”编码在java版本中不起作用

时间:2017-09-22 09:52:52

标签: java powershell utf-8

我保存了我的Java源文件,在我的eclipse中将其编码类型指定为UTF-8。它在日食中运行良好。 当我用maven&创建一个构建时在我的系统中执行它Unicode字符不起作用。

这是我的代码:

    byte[] bytes = new byte[dataLength];
    buffer.readBytes(bytes);
    String s = new String(bytes, Charset.forName("UTF-8"));
    System.out.println(s);

enter image description here

Eclipse控制台& Windows控制台截图附件。 期待其他系统中的eclipse输出(windows命令提示符,powershell窗口,Linux机器等)。

2 个答案:

答案 0 :(得分:-1)

您可以使用Console类。以下代码可以为您提供一些灵感:

public class Foo {

    public static void main(String[] args) throws IOException {
        String s = "öäü";
        write(s);
    }

    private static void write(String s) throws IOException {
        String encoding = new OutputStreamWriter(System.out).getEncoding();
        Console console = System.console();
        if (console != null) {
            // if there is a console attached to the jvm, use it.
            System.out.println("Using encoding " + encoding + " (Console)");
            try (PrintWriter writer = console.writer()) {
                writer.write(s);
                writer.flush();
            }
        } else {
            // fall back to "normal" system out
            System.out.println("Using encoding " + encoding + " (System out)");
            System.out.print(s);
        }
    }
}

使用默认设置在Windows 10(poowershell),Ubuntu 16.04(bash)上测试。也适用于IntelliJ(Windows和Linux)。

答案 1 :(得分:-1)

据我所知,你要么有错误的角色,我认为不是这样,或者你试图在不处理角色的终端上显示它。我写了一个简短的测试来分开问题。

public static void main(String[] args){
    String testA = "ֆޘᜅᾮ";
    String testB = "\u0586\u0798\u1705\u1FAE";

    System.out.println(testA.equals(testB));
    System.out.println(testA);
    System.out.println(testB);

    try(BufferedWriter check = Files.newBufferedWriter(
            Paths.get("uni-test.txt"),
            StandardCharsets.UTF_8,
            StandardOpenOption.CREATE,
            StandardOpenOption.TRUNCATE_EXISTING) ){
        check.write(testA);
        check.write("\n");
        check.write(testB);
        check.close();
    } catch(IOException ioc){

    }

}

您可以使用所需的字符替换值。

如果字符串是您想要的实际字符串,则第一行应打印出true。之后是显示角色的问题。例如,如果我用less打开文本文件,那么其中一半会被破坏。如果我用firefox打开它,那么我会看到所有四个字符,但有些字符很难看。您需要一个具有相应unicode值字符的字体。

您可以做的一件事是在文字处理器中打开文件,然后选择一个显示您想要的字符的字体。

根据OP的建议,包括-Dfile.encoding=UTF8会导致在使用System.out.println时正确显示字符。与更改System.out的编码的this question类似。