相关疑难解决方法(0)

Java中的"用于编码的不可映射字符"警告

我正在编写一个Java项目,在编译时发出以下警告:

/src/com/myco/apps/AppDBCore.java:439: warning: unmappable character for encoding UTF8
    [javac]         String copyright = "? 2003-2008 My Company. All rights reserved.";
Run Code Online (Sandbox Code Playgroud)

我不确定SO会如何在日期之前渲染角色,但它应该是版权符号,并在警告中显示为钻石中的问号.

值得注意的是,角色正确地出现在输出工件中,但警告是令人讨厌的,包含此类的文件可能有一天会被文本编辑器触及,这会错误地保存编码...

如何将此字符注入"copyright"字符串,以便编译器满意,并且该符号保留在文件中而没有潜在的重新编码问题?

java encoding ascii utf-8

106
推荐指数
8
解决办法
19万
查看次数

Java 8 UTF-8编码问题(java bug?)

使用UTF-8编码创建String时存在不一致.

运行此代码:

public static void encodingIssue() throws IOException {
    byte[] array = new byte[3];
    array[0] = (byte) -19;
    array[1] = (byte) -69;
    array[2] = (byte) -100;

    String str = new String(array, "UTF-8");
    for (char c : str.toCharArray()) {
        System.out.println((int) c);
    }
}
Run Code Online (Sandbox Code Playgroud)

在Java 1.8.0_20(及更早版本)上,我们得到了结果

 65533
Run Code Online (Sandbox Code Playgroud)

在Java 1.7和1.6上,我们得到了正确的结果:

 57052
Run Code Online (Sandbox Code Playgroud)

你遇到过这个错误吗?这有解决方法吗?

这种不一致也表现为Shift_JIS,JIS_X0212-1990,x-IBM300,x-IBM834,x-IBM942,x-IBM942C,x-JIS0208,但显然UTF-8更为紧迫.

java encoding utf-8 java-8

18
推荐指数
2
解决办法
4699
查看次数

Java 8改变了UTF-8解码

我们最近将我们的应用程序从JDK 7迁移到了JDK 8.在更改之后,我们遇到了以下代码片段的问题.

String output = new String(byteArray, "UTF-8");
Run Code Online (Sandbox Code Playgroud)

字节数组可能包含无效的UTF-8字节序列.在UTF-8解码时,相同的字节数组在Java 7和Java 8上产生两个不同的字符串.

根据这篇SO帖子答案,Java 8"修复"了Java 7中的一个错误,并用一个替换字符串替换了无效的UTF-8字节序列,这符合UTF-8规范.

但我们希望坚持使用Java 7的解码字符串版本.

我们尝试在Java 8上使用带有CodingErrorAction的CharsetDecoder作为REPLACE,REPORT和IGNORE.但是,我们无法生成与Java 7相同的字符串.

我们能用合理复杂的技术做到这一点吗?

java regression utf-8 java-8

8
推荐指数
1
解决办法
4162
查看次数

标签 统计

java ×3

utf-8 ×3

encoding ×2

java-8 ×2

ascii ×1

regression ×1