gpt4 book ai didi

带有 ß 字符的 Java 编译问题

转载 作者:搜寻专家 更新时间:2023-10-30 21:33:28 25 4
gpt4 key购买 nike

我遇到了一个奇怪的问题。在下面的代码中,我正在寻找 ß 的存在。

public static void main(String[] args) {
char [] chArray = {'ß'};
String str = "Testß";
for(int i=0; i<chArray.length; i++){
if(str.indexOf(chArray[i])>-1){
System.out.println("ß is present");
break;
}
}

}

我有一个在 Linux Java 6 的 JBOSS 上运行的 Web 应用程序。当将代码包含在上面指定的应用程序中时,上面的代码没有检测到 ß 的存在令人惊讶的是,如果我在我的 eclipse 工作区中编译同一个文件,然后在应用程序中应用补丁,它会按预期运行!

注意事项:

  1. 应用程序构建环境对我来说是一个黑盒子,因此不知道是否有任何 -encoding 选项存在于 javac 命令或类似的东西中
  2. 我的eclipse的JRE是java8,但是项目设置的编译器版本是Java6
  3. 我在数组声明中将值从 ß 更改为等价于\u00DF 的 unicode,但行为仍然相同。

    char[] chArray = {'\u00DF'};

  4. 当我反编译生成的类文件时,字符数组声明值显示为65533,即\uFFFD,只不过是用于不明符号的替换字符。我使用 JD-GUI 作为反编译器,我认为它不可靠!

需要你们的帮助!我确定它与以下内容不同: beta 的区分大小写问题 Java's equalsIgnoreCase fails with ß ("Sharp S" used in German alphabet)

提前致谢

最佳答案

我认为你的问题是 ß 的编码。您有两种选择来解决您的错误:

  1. 首先将你的java源代码转换成ascii字符,然后编译它:

    native2ascii "your_class_file.java"
    javac "your_class_file.java"
  2. 使用您的编码编译您的 java 文件,Linux 上为 utf-8,Windows 上为 iso-8859-15:

    javac -encoding "encoding" "your_class_file.java"

据我判断,将 "ß" 替换为 "\u00df" 应该可行。如果上述解决方案不起作用,请将每个字符及其 unicode 值打印到 System.out 并查看哪个字符是“ß”。

另一个错误可能是您使用不支持 ß 的编码读取文本;尝试通过读取字节和调用来读取您的字符串:

String input = new String(input_bytes, StandartCharsets.UTF_8); // on linux
String input = new String(input_bytes, StandartCharsets.ISO_8859_1); // on windows

有关字符集的更多信息,请参阅 StandartCharsets class reference .

关于带有 ß 字符的 Java 编译问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25001989/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com