Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.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编译问题与ß;性格_Java_Non Ascii Characters - Fatal编程技术网

Java编译问题与ß;性格

Java编译问题与ß;性格,java,non-ascii-characters,Java,Non Ascii Characters,我遇到了一个奇怪的问题。在下面的代码中,我正在搜索ß的存在 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

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

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;
        }
    }

}
publicstaticvoidmain(字符串[]args){
char[]chArray={'ß'};
String str=“Testß”;
对于(int i=0;i-1){
System.out.println(“ß存在”);
打破
}
}
}
我有一个运行在JBOSS上的web应用程序,linux,Java 6当将代码包含在上述指定应用程序中时,上述代码未检测到ß的存在。 令人惊讶的是,如果我在eclipse工作区中编译同一个文件,然后在应用程序中应用补丁,它将按预期运行

注意事项:

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

    char[]chArray={'\u00DF'}

  • 当我反编译生成的类文件时,字符数组声明值显示为65533,即\uFFFD,除了用于未识别符号的替换字符外,什么都没有。我使用JD-GUI作为反编译器,我认为这不可信

  • 需要你们的帮助!我确信这与:测试版的大小写敏感问题不同


    提前谢谢

    我想你的问题是ß的编码。您有两种解决错误的方法:

  • 首先将java源代码转换为ascii字符,然后编译:

    native2ascii "your_class_file.java"
    javac "your_class_file.java"
    
  • 使用您的编码编译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
    

    有关字符集的更多信息,请参阅。

    感谢您的时间和回复


    实际问题是类文件没有在构建中生成,因此更改没有反映出来。在java源文件中使用ß的unicode值\u00DF应该可以正常工作。

    我怀疑您没有将源代码保存为UTF-8