Ответ 1
Спасибо за ваше время и ответы!
Фактическая проблема заключалась в том, что файл класса не был сгенерирован в сборке, поэтому изменение не отражалось. Использование значения un unicode\u00DF в исходном файле java должно работать нормально.
Я столкнулся с какой-то странной проблемой. В нижеприведенном фрагменте кода я ищу присутствие ß.
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;
}
}
}
У меня есть веб-приложение, работающее на JBOSS в linux, Java 6. Приведенный выше код не обнаруживает присутствие ß, когда он включает код в указанное выше приложение. Удивительно, если я скомпилирую тот же файл в рабочей области eclipse, а затем применим патч в приложении, он работает как ожидалось!
Примечание:
Я изменил значение от ß до уникода, эквивалентного \u00DF в объявлении массива, но все же поведение такое же.
char [] chArray = {'\ u00DF'};
Когда я декомпилировал созданный файл класса, объявленное значение символьного массива было отображено как 65533, что \uFFFD, ничего, кроме символа замены, который используется для неопознанного символа. Я использовал JD-GUI как декомпилятор, который я не считаю заслуживающим доверия!
Вам нужна помощь! Я уверен, что это не то же самое, что: вопрос с вопросом о бета-версии Java equalsIgnoreCase терпит неудачу с ß ( "Sharp S" используется в немецком алфавите)
Заранее спасибо
Спасибо за ваше время и ответы!
Фактическая проблема заключалась в том, что файл класса не был сгенерирован в сборке, поэтому изменение не отражалось. Использование значения un unicode\u00DF в исходном файле java должно работать нормально.
Я думаю, что ваша проблема - это кодирование ß. У вас есть два варианта решения вашей ошибки:
Сначала преобразуйте исходный код java в символы ascii, а затем скомпилируйте его:
native2ascii "your_class_file.java"
javac "your_class_file.java"
Скомпилируйте свой java файл с вашей кодировкой, utf-8
в linux и iso-8859-15
в окнах:
javac -encoding "encoding" "your_class_file.java"
Насколько я могу судить об этом, он должен был работать с заменой "ß"
на "\u00df"
. Если вышеприведенные решения не работают, напечатайте каждый char и его значение unicode до System.out
и посмотрите, какой из char равен 'ß'.
Другая ошибка может заключаться в том, что вы читаете текст в кодировке, которая не поддерживает ß; попробуйте прочитать свою строку, прочитав байты и вызовите:
String input = new String(input_bytes, StandartCharsets.UTF_8); // on linux
String input = new String(input_bytes, StandartCharsets.ISO_8859_1); // on windows
Для получения дополнительной информации о кодировках см. Стандартная ссылка класса StandartCharsets.