我保存了我的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);
Eclipse控制台& Windows控制台截图附件。 期待其他系统中的eclipse输出(windows命令提示符,powershell窗口,Linux机器等)。
答案 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类似。