Ant проблема с кодировкой в ​​Windows - файлы UTF-8, но плюет мусор на диакритику

Как-то я не могу заставить мои источники UTF-8 играть хорошо с Ant.

Я получаю много "предупреждения: неуправляемый символ для кодирования ascii". На самом деле я схожу с ума. Часы, часы и часы. Кстати, я заметил, что 5 человек уже использовали тэг сумасшедший.: -)

И да, я прочитал этот, этот и другие. Google также (первые 5 страниц результатов, по крайней мере, 3 или 4 разных поисковых запроса, по крайней мере). Есть варианты javac. Я пробовал. Существует также пресет или что-то (извините, 3 часа ночи). Не работает.

Я создаю файлы apk для Android с помощью Ant. Я не могу использовать Eclipse, так что нет. И, кстати, документация ant для меня тарабарщина. Эти примеры бесполезны. Я потерял счет того, сколько я пробовал.

Я попытался использовать параметр Dfile.encoding, попробовал смешать это с командой CHCP 65001 Windows. Были ли все комбинации, и он даже делает ant (Javac, я думаю), прекращайте ошибки плющения, но это все равно не имеет значения. Мой код по-прежнему заканчивается мусорными карахтерами (куча "вместо", "и т.д." ).

Ответ 1

Всем, кто использует исходные файлы UTF-8 в Windows и пытался создать пакеты Android с Proguard, используя знаменитое сообщение в блоге Дэн Гальпин/Тим Брей.

Эта проблема с кодировкой происходит с javac (спасибо за подсказку, JesperE). Тем не менее, я не смог создать новое правило javac в своих файлах проекта из-за необходимых параметров, о которых я ничего не знал. Итак, вот простой ответ (возможно, не единственный ответ):

  • Попробуйте обычную команду ant release.
  • Обратите внимание, что с самого начала выводится вывод о некоторых импортированных правилах ANT. С самого начала вы увидите некоторые [настройки] правил. Ищите этот:

    [setup] Импорт файлов правил: tools\ ant\ant_rules_r3.xml

  • Найдите этот файл и откройте его. Найдите "кодировку javac". Вы увидите, что установлено значение "ascii". Перейдите в "UTF-8".

  • Повторно сделайте "ant release", и все будет хорошо.

Что я здесь сделал. Я уверен, что есть способ переопределить это для каждого проекта. Но он продолжал давать мне ошибки по обязательным параметрам, как я уже сказал. Так что для меня, по крайней мере, это было намного проще сделать таким образом. Кроме того, я все равно работаю с UTF-8.

С уважением!

Ответ 2

Правильно ли задаете кодировку файла компилятору? Компонент java в противном случае по умолчанию использовал бы стандартную кодировку платформы, которая в Windows (например) не является UTF-8. Кодирование задается с помощью флага -encoding для javac.

javac -encoding utf8 ...

И в ant build.xml:

<javac ... encoding="UTF-8" ... />

Ответ 3

Просто укажите кодировку в build.xml script:

<javac encoding="UTF-8" ... />

Но для повторного использования кода лучше извлечь значение в файл конфигурации проекта:

<property file="build.properties" />
<property name="java.encoding" value="ascii" />
<javac encoding="${java.encoding}"
       source="${java.source}" ....>
       <src path="${source.dir}" />
       <classpath>
            <fileset ... />
       </classpath>
 </javac>

А затем просто добавьте java.encoding=UTF-8 в build.properties, чтобы переопределить кодировку для каждого проекта.

Ответ 4

Вы должны установить одну и ту же страницу во многих местах:

  • в Ant Script javac encoding="UTF-8" ... /
  • -Dfile.encoding=UTF-8 в параметрах Ant, вызывающих
  • В file-properties-resource-encoding - снова выберите одну и ту же страницу. Вы также можете изменить его для всех файлов в контейнере с помощью IDE (предпочтения для Eclipse). Затем сделайте все файлы наследуемыми от контейнера.

  • Если некоторые файлы были созданы в неправильной кодировке, переработайте их содержимое через PsPad или, возможно, другой текстовый редактор (копировать-вставить, изменить кодировку файла, обратно скопировать-вставить). Эти файлы будут упоминаться в unmappable character ошибках.

После установки всех этих четырех проблем у вас будет NO unmappable character.

Ответ 5

ниже - использование -Dfile.encoding = UTF-8 в файле ant build.xml:

<java classname="${main-class}" fork="true">
<jvmarg value="-Dfile.encoding=UTF-8"/>

Это решит проблему. Работа для всех UTF 8 char.