java - "Unmappable character for encoding UTF-8"错误

标签 java maven-2 encoding utf-8

我在以下方法中遇到编译错误。

public static boolean isValidPasswd(String passwd) {
    String reg = "^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[~#;:?/@&!\"'%*=¬.,-])(?=[^\\s]+$).{8,24}$";
    return Pattern.matches(reg, passwd);
}
at Utility.java:[76,74] unmappable character for 
enoding UTF-8. 74th character is' " '

我该如何解决这个问题?谢谢。

最佳答案

您的源代码文件存在编码问题。它可能是 ISO-8859-1 编码的,但编译器设置为使用 UTF-8。这将在使用字符时导致错误,这些字符在 UTF-8 和 ISO-8859-1 中的字节表示形式不同。这将发生在所有不属于 ASCII 的字符上,例如 ¬ NOT SIGN .

您可以使用以下程序对此进行模拟。它只是使用您的源代码行并生成一个 ISO-8859-1 字节数组并使用 UTF-8 编码解码这个“错误”。您可以看到线路在哪个位置损坏。我在您的源代码中添加了 2 个空格以适应位置 74 以适应 ¬ NOT SIGN ,这是唯一的字符,它将在 ISO-8859-1 编码和 UTF-8 编码中生成不同的字节。我猜这将与真实源文件的缩进匹配。

 String reg = "      String reg = \"^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[~#;:?/@&!\"'%*=¬.,-])(?=[^\\s]+$).{8,24}$\";";
 String corrupt=new String(reg.getBytes("ISO-8859-1"),"UTF-8");
 System.out.println(corrupt+": "+corrupt.charAt(74));
 System.out.println(reg+": "+reg.charAt(74));     

导致以下输出(由于标记而困惑):

String reg = "^(?=.[0-9])(?=.[a-z])(?=.[A-Z])(?=.[~#;:?/@&!"'%*=�.,-])(?=[^\s]+$).{8,24}$";: �

String reg = "^(?=.[0-9])(?=.[a-z])(?=.[A-Z])(?=.[~#;:?/@&!"'%*=¬.,-])(?=[^\s]+$).{8,24}$";: ¬

https://ideone.com/ShZnB 上观看“直播”

要解决此问题,请使用 UTF-8 编码保存源文件。

关于java - "Unmappable character for encoding UTF-8"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4995057/

相关文章:

c - 在 2 台不同的 Linux 机器上生成 bmp 图像给我 1 个工作文件和 1 个损坏的文件

ios - 如何在 Objective C 中处理数据库中的特殊字符?

ios - CGContextShowTextAtPoint 和欧元符号

java ee MVC模式,模型和 View 是否直接相互通信

java - 动态创建对象并将其添加到列表JavaFX

java - 为什么对象类中只有 clone 和 finalize 是 protected 方法?

maven-2 - GWT 2.1 和 Codehaus Maven 插件

java - 使用 Jackson 和 Mockito 序列化对象时的无限递归

netbeans - Maven codehaus.mojo无法解析

java - 处理 JAR 和开发中的资源文件路径