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

У меня есть проект Java, который читает кодированные UTF-8 файлы .txt для создания отображаемых строк.При запуске в 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();
}

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

Работает нормально при компиляции и запуске в 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();
}

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

1 Ответ

3 голосов
/ 03 января 2012

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

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

...