Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java &引用;用于编码UTF-8的不可映射字符;错误_Java_Maven 2_Encoding_Utf 8 - Fatal编程技术网

Java &引用;用于编码UTF-8的不可映射字符;错误

Java &引用;用于编码UTF-8的不可映射字符;错误,java,maven-2,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]的不可映射字符

我在下面的方法中得到一个编译错误

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]的不可映射字符 enoding UTF-8。第74个字符是''
如何修复此问题?谢谢。

以下为我编译:

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


Java编译器假定您的输入是UTF-8编码的,因为您指定它为UTF-8编码,或者因为它是您的平台默认编码


但是,
.java
文件中的数据实际上并不是用UTF-8编码的。问题可能是
字符。请确保编辑器(或IDE)“选择”实际上以UTF-8编码保护其文件。

编译器正在使用UTF-8字符编码读取源文件。但该文件必须是由编辑器使用其他编码编写的。请在设置为UTF-8编码的编辑器中打开文件,修复引号,然后再次保存

或者,您可以找到字符的Unicode点,并在源代码中使用Unicode转义。例如,字符
a
可以替换为Unicode转义
\u0041


顺便说一下,当使用
matches()
方法时,您不需要使用开始和结束线锚定
^
$
。当使用
matches()
方法时,整个序列必须由正则表达式匹配。锚定仅对
find()有用
方法。

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

你可以用下面的程序来模拟,它只需要使用你的一行源代码,生成一个ISO-8859-1字节数组,然后解码这个“错误”“使用UTF-8编码。您可以看到线路在哪个位置损坏。我在源代码中添加了两个空格以适应位置74,以适应
,这是唯一的字符,它将在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])(?=[a-z])(?=[a-z]:?/@&!”%*=�.,-])(?=[^\s]+$).{8,24}$”;:�

String reg=“^(?=[0-9])(?=[a-z])(?=[a-z])(?=[a-z])(?=[a-z])(?=[a-z])(?=[a-z])(?=[a-z])(?=[a-z])(?=[a-z])(?=[a-z])(?=[a-z])(?=[a-z],-)(?=[s]+$).:

请看“现场直播”


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

“错误:UTF-8编码的不可映射字符”也就是说,java找到了一个在UTF-8中不表示的字符。因此,在编辑器中打开该文件并将字符编码设置为UTF-8。您应该能够找到一个在UTF-8中不表示的字符。去掉该字符并重新编译。

我正在为遗留系统在Linux设备上设置CI构建服务器始于2000年。有一个部分生成包含非UTF8字符的PDF。我们正处于发布的最后阶段,因此我无法替换让我感到悲伤的字符,但由于Dilbertesque的原因,我不能在发布后等待一周来解决此问题。幸运的是,Ant中的“javac”命令有一个“编码”参数

 <javac destdir="${classes.dir}" classpathref="production-classpath" debug="on"
     includeantruntime="false" source="${java.level}" target="${java.level}"

     encoding="iso-8859-1">

     <src path="${production.dir}" />
 </javac>

在eclipse中,尝试转到文件属性(Alt+Enter)并更改
资源
→ '<代码>文本文件编码'→
Other
UTF-8
。重新打开文件,检查字符串/文件中是否存在垃圾字符。将其删除。保存文件

更改编码资源→ '<代码>文本文件编码返回默认值

编译并部署代码。

感谢Michael Konietzka()的回答

我在Eclipse/STS中做到了这一点:

Preferences > General > Content Types > Selected "Text" 
    (which contains all types such as CSS, Java Source Files, ...)
Added "UTF-8" to the default encoding box down the bottom and hit 'Add'

答对了,错误消失了!

我在使用Eclipse时注意到了这个问题。我需要在pom.xml文件中添加编码,并解决了这个问题。

对于IntelliJ用户,一旦您找到原始编码是什么,这非常容易。您可以从窗口右下角选择编码,您将看到一个对话框提示:

您选择的编码(“[encoding type]”)可能会更改内容 “[您的文件]”的。要从磁盘重新加载文件还是转换 文本是否以新编码保存

因此,如果您碰巧有一些字符保存在一些奇怪的编码中,您应该首先选择“重新加载”以加载文件,所有这些字符都采用坏字符的编码。对我来说,这将?字符转换为正确的值

IntelliJ可以判断您是否很可能没有选择正确的编码,并会警告您。请返回并重试

一旦看到坏字符消失,请将右下角的“编码选择”框更改回您最初想要的格式(如果您用谷歌搜索此错误消息,则可能是UTF-8)。这一次,请选择对话框上的“转换”按钮


对我来说,我需要重新加载为“windows-1252”,然后转换回“UTF-8”。有问题的字符是可能从Word文档(或电子邮件)粘贴的单引号('and')使用错误的编码,上述操作会将它们转换为UTF-8。

您将
替换为
¼
@Luke mhh,这很奇怪,这就是复制/粘贴为我所做的。.我添加了gvim窗口的屏幕截图。无论如何,我并没有真正回答这个问题,所以我将使这个CW与我的Eclipse一起编译,但是T的中间部分看起来有点奇怪,你确定问题是“”而不是“”吗?你试过用其他编辑器保存文件并确保编码是UTF-8吗?我所做的是打开所讨论的文件(希望你可以推断出它抱怨的是哪个文件)。
Preferences > General > Content Types > Selected "Text" 
    (which contains all types such as CSS, Java Source Files, ...)
Added "UTF-8" to the default encoding box down the bottom and hit 'Add'