Задача Ant replace искажает символы в файле UTF-8

#java #encoding #ant #utf-8

#java #кодирование #ant #utf-8

Вопрос:

У меня есть следующая задача ant:

 <target name="test">
    <replace file="test.txt" token="smth" value="anything"/>        
</target>
  

test.txt кодируется ли UTF-8. Проблема в том, что когда я запускаю эту задачу

она искажает некоторые символы UTF-8 (только некоторые из них, не все).
Я пытался использовать ant -Dfile.encoding=UTF-8 -buildfile=build.xml ,

и указанный build.xml кодирование <?xml version="1.0" encoding="UTF-8"> ,

но проблема остается.

Как я могу заставить мою задачу Ant корректно работать с файлами в кодировке UTF?

Комментарии:

1. Например, что и как повреждает?

2. Некоторые нелатинские символы, но какие именно символы повреждены, зависит от конкретного компьютера.

3. Почему вы удалили свой комментарий из моего ответа? Пожалуйста, ответьте на вопросы, которые я задал в ответ на этот теперь удаленный комментарий.

4. Поскольку я понял, что это неправильно, но я не ожидал, что вы заметите это слишком быстро, поэтому я удалил это, извините.

Ответ №1:

Из документов для replace task в списке атрибутов:

Атрибут: encoding
Описание: Кодировка файлов, над которыми работает replace.
По умолчанию: Нет — по умолчанию используется кодировка JVM по умолчанию

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

     <replace file="test.txt" token="smth" value="anything" 
             encoding="UTF-8" />        
  

Комментарии:

1. @tsds: Тогда, вероятно, это не настоящий UTF-8. Откуда взялся файл и как вы обнаруживаете это повреждение? Можете ли вы привести примеры того, что изменилось с точки зрения двоичных данных? (Откройте файл до и после в шестнадцатеричном редакторе.)

2. да, это сработало, спасибо. Но я опубликовал упрощенный пример ant task, который я использую (вместо replace я использую свою пользовательскую задачу), я все еще не могу использовать ваше решение для своей пользовательской задачи ant, но вы дали мне подсказку.