Приложение Java читает текстовые файлы в кодировке UTF-8, но после сборки ant символы не соответствуют ожидаемым

У меня есть проект Java, который читает файлы .txt в кодировке UTF-8, чтобы создавать отображаемые строки. Работая в Eclipse, файлы читаются и отображаются, как и ожидалось, но после сборки моего муравья символы не выходят так, как должны.

Вот мой файл build.xml

<?xml version="1.0"?>
<project name="Rutherford" default="jar">

    <property name="libsSrc" value="libs"/>
    <property name="build" value="build"/>
    <property name="classes" value="build/classes"/>
    <property name="jar" value="build/jar"/>
    <property name="libs" value="build/libs"/>

    <path id="classpath">
            <fileset dir="${libsSrc}" includes="*.jar"/>
    </path>

    <pathconvert property="mf.classpath" pathsep=" ">
            <path refid="classpath"/>
            <mapper>
                    <chainedmapper>
                            <flattenmapper/>
                            <globmapper from="*.jar" to="lib/*.jar"/>
                    </chainedmapper>
            </mapper>
    </pathconvert>

    <target name="clean" description="remove intermediate files">
        <delete dir="build"/>
    </target>

    <target name="compile" description="compile the Java source code to class files">
        <mkdir dir="${classes}"/>
        <javac srcdir="." destdir="${classes}" classpathref="classpath">
            <compilerarg line="-encoding utf-8"/>
        </javac>
    </target>

    <target name="jar" depends="compile" description="create a Jar file for the application">
        <mkdir dir="${jar}"/>
        <jar destfile="${jar}/App.jar">
            <zipgroupfileset dir="${libsSrc}" includes="*.jar"/>
            <fileset dir="${classes}" includes="**/*.class"/>
            <manifest>
                <attribute name="Main-Class" value="nat.rutherford.DesktopStarter"/>
                <attribute name="Class-Path" value="${mf.classpath}"/>
            </manifest>
        </jar>
    </target>

</project>

Я попытался скомпилировать кодировку символов UTF-8, используя

<compilerarg line="-encoding utf-8"/>

но, очевидно, этого недостаточно, что мне нужно изменить, чтобы заставить это работать?

Спасибо

Изменить 1

Я читаю файлы .txt в с.

public String fileToString(String file) {
    InputStream in = new BufferedInputStream(Gdx.files.internal(file).read());
    return new Scanner(in).useDelimiter("\\A").next();
}

который возвращает строку в переменную String, то я просто беру эту строку и передаю ее в объект

Он работает нормально при компиляции и запуске в eclipse.

Изменить 2

Это исправление

public String fileToString(String file) {
    InputStream in = new BufferedInputStream(Gdx.files.internal(file).read());
    return new Scanner(in, "UTF-8").useDelimiter("\\A").next();
}

Просто, когда знаешь, где искать! лол спасибо!


person Neilos    schedule 02.01.2012    source источник
comment
Итак, я полагаю, вы говорите здесь о файлах ресурсов, которые муравей должен скопировать в папку, содержащую скомпилированные классы?   -  person Maarten Bodewes    schedule 03.01.2012
comment
@owlstead Да, это файлы ресурсов, и нет, в настоящее время они не копируются в папку, содержащую скомпилированные классы. Сейчас я просто вставляю их вручную вместе с JAR. Я не очень хорошо разбираюсь в Ant. Как вы думаете, если я скопирую их, это сработает? У меня было подозрение, что это может быть так, но я не был уверен, как это сделать.   -  person Neilos    schedule 03.01.2012


Ответы (1)


В соответствии с документацией используйте encoding='utf-8' вместо compiler-arg.

Однако... я подозреваю, что ваша проблема во время выполнения, а не во время компиляции. Вы создаете объекты OutputStreamWriter без передачи кодировки? Или передать интересные символы System.out.println? Или соответственно InputStreamReader или Scanner? Исправлением в этом случае будет добавление -Dfile.encoding=utf-8 в командную строку.

person bmargulies    schedule 02.01.2012
comment
использование ‹javac›‹encoding›utf-8‹/encoding›‹/javac› приводит к ошибке компиляции, javac не поддерживает вложенный элемент кодирования. размещение параметра кодирования в теге javac позволяет это сделать. компилировать. Однако это не решило проблему, мои символы по-прежнему отображаются неправильно. - person Neilos; 03.01.2012
comment
пожалуйста, посмотрите мое редактирование 1, чтобы узнать, что я делаю с файлами .txt (я использую библиотеку libGDX, но я не думаю, что это имеет отношение к этой проблеме). - person Neilos; 03.01.2012
comment
Вы были правы, это была проблема времени выполнения. Я просто изменил свой сканер, как показано в Edit 2 - person Neilos; 03.01.2012