2016-01-07 6 views
1

У меня есть строка, состоящая из символов, таких как «ò, ý, ü, û, ú, ù, ÷, ö, ï, î». Перед тем, как класс скомпилирован с Java 1.6, методы вроде myString.split("ý"); или myString.contains("ý"); работают. После компиляции класса с помощью командной строки методы не работают с этими символами. Я должен использовать Java 1.6.Java 1.6 методы класса String не работают со всеми символами

Есть ли способ избежать этой проблемы?

+0

Как это работает, прежде чем скомпилировать его? Вы придумали свой собственный интерпретатор Java, который может напрямую запускать исходный код Java без его компиляции? – Andreas

+0

Как он работает? – Andreas

+0

@Andreas Я запускаю его с Eclipse, который, вероятно, использует Java 1.8. С компиляцией я подразумеваю компиляцию с Java 1.6 и экспорт ее в банку. – MaggiCraft

ответ

4

По умолчанию исходные файлы Java хранятся в кодировке по умолчанию платформы, и именно так javac читает файлы, если -encoding не указан.

Если вы введете/вставьте символы в исходный файл в Eclipse, Eclipse автоматически изменит кодировку на UTF-8 (я считаю, что она подсказывает вам сначала, но я не уверен).

В Eclipse каждый источник Java теоретически может быть в разных кодировках. Eclipse запоминает кодировку каждого исходного файла, и вы можете видеть и/или изменять эту кодировку в диалоговом окне свойств файла в Eclipse.

Если Eclipse изменил кодировку на UTF-8, то компиляция в Eclipse будет работать нормально, но компилируется вне, например. путем вызова javac или с помощью Ant, не будет работать, потому что они будут по умолчанию читать исходный файл, используя стандартную кодировку платформы.

Итак, если у вас есть смесь кодировок исходного файла, вы должны изменить их все на одну и ту же кодировку, поэтому с помощью javac можно указать эту общую кодировку. У вас есть два варианта:

  • Конвертировать все файлы в UTF-8 и указывать -encoding UTF-8.
  • Преобразование всех файлов в стандартную кодировку платформы и использование экранов unicode для символов, которые не поддерживаются этой кодировкой, которая для ý равна \u00FD.
Смежные вопросы