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.