Rav*_*avi 64 java encoding maven-2 utf-8
我在以下方法中遇到编译错误.
public static boolean isValidPasswd(String passwd) {
String reg = "^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[~#;:?/@&!\"'%*=¬.,-])(?=[^\\s]+$).{8,24}$";
return Pattern.matches(reg, passwd);
}
Run Code Online (Sandbox Code Playgroud)
at Utility.java:[76,74] unmappable character for enoding UTF-8. 74th character is' " '
我怎样才能解决这个问题?谢谢.
Mic*_*zka 45
您的源代码文件存在编码问题.它可能是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));
Run Code Online (Sandbox Code Playgroud)
这导致以下输出(由于标记而混乱):
String reg ="^(?=.[0-9])(?=. [az])(?=.[AZ])(?=. [〜#;:?/ @&!"'%*= ., - ])(?= [^\s] + $).{8,24} $";:
String reg ="^(?=.[0-9])(?=. [az])(?=.[AZ])(?=. [〜#;:?/ @&!"'%*= ¬., - ])(?= [^\s] + $).{8,24} $";:¬
请访问https://ideone.com/ShZnB,查看"直播"
要解决此问题,请使用UTF-8编码保存源文件.
Ste*_*man 13
我正在Linux机器上为2000年开始的遗留系统设置CI构建服务器.有一个部分生成包含非UTF8字符的PDF.我们正处于发布的最后阶段,所以我无法取代让我悲伤的角色,但对于Dilbertesque的原因,我不能等待一周后才能解决这个问题.幸运的是,Ant中的"javac"命令有一个"encoding"参数.
<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>
Run Code Online (Sandbox Code Playgroud)
Java编译器假定您的输入是UTF-8编码,因为您指定它是因为它是您的平台默认编码.
但是,.java
文件中的数据实际上并未以UTF-8编码.问题可能就是¬
角色.确保您选择的编辑器(或IDE)实际上以UTF-8编码保护其文件.
小智 5
在 Eclipse 中尝试转到文件属性 ( Alt+ Enter) 并将Resource
→ ' Text File encoding
' →更改Other
为UTF-8
. 重新打开文件并检查字符串/文件中某处是否有垃圾字符。去掉它。保存文件。
将编码资源 → ' Text File encoding
' 改回默认值。
编译和部署代码。
对于 IntelliJ 用户来说,一旦你知道原始编码是什么,这就非常容易了。您可以从窗口右下角选择编码,系统将提示您一个对话框:
\n\n\n\n\n您选择的编码(“[编码类型]”)可能会更改“[您的文件]”的\n内容。您想从磁盘重新加载文件还是转换文本并以新编码保存?
\n
因此,如果您碰巧以某种奇怪的编码保存了一些字符,您应该首先选择“重新加载”以全部以错误字符的编码加载文件。对我来说这变成了?字符转换为适当的值。
\n\nIntelliJ 可以判断您是否很可能没有选择正确的编码,并会向您发出警告。恢复并重试。
\n\n一旦您看到坏字符消失,请将右下角的编码选择框更改回您最初想要的格式(如果您在 Google 上搜索此错误消息,则可能是 UTF-8)。这次选择对话框上的“转换”按钮。
\n\n对我来说,我需要重新加载为“windows-1252”,然后转换回“UTF-8”。有问题的字符是单引号(\xe2\x80\x98 和 \xe2\x80\x99),可能是从 Word 文档(或电子邮件)中使用错误的编码粘贴的,上述操作会将它们转换为 UTF-8 。
\n以下内容为我编译:
\n\nclass E{\n String s = "^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[~#;:?/@&!\\"\'%*=\xc2\xbc.,-])(?=[^\\\\s]+$).{8,24}$";\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n看:
\n\n 归档时间: |
|
查看次数: |
185586 次 |
最近记录: |