【问题标题】:Ant encoding problem on Windows - UTF-8 files but spits garbage on diacriticsWindows 上的 Ant 编码问题 - UTF-8 文件但在变音符号上吐出垃圾
【发布时间】:2010-11-18 05:01:23
【问题描述】:

不知何故,我无法让我的 UTF-8 源代码与 Ant 配合得很好。

我收到很多“警告:编码 ascii 的不可映射字符”。我要疯了,真的。小时和小时和小时。顺便说一句,我注意到 5 个人已经疯狂地使用了这个标签。 :-)

是的,我读过thisthis 等。谷歌也是(至少 3 或 4 次不同搜索的前 5 页结果)。有 javac 选项。我试过了。还有一些预设或其他东西(对不起,凌晨 3 点)。也没用。

我正在使用 Ant 生成 Android apk 文件。我不能使用 Eclipse,所以不。顺便说一句,蚂蚁文档对我来说是胡言乱语。这些例子根本没有用。我已经数不清自己尝试了多少。

我尝试使用 Dfile.encoding 选项,尝试将其与 CHCP 65001 Windows 命令混合使用。是否所有的组合,它甚至使 Ant(我猜是 Javac)停止吐错误,但这仍然无关紧要。我的代码仍然以垃圾字符结尾(一堆 ?? 而不是 á、í 等)。

【问题讨论】:

  • 我能理解您的沮丧,但您并没有给我们太多帮助。如果您可以将其归结为一个包含 build.xml 和 Java 源文件的简单示例,您将大大增加获得答案的机会。
  • 我知道我不是。这正是我如此沮丧的原因。我知道回答这些问题有多可怕。问题是,即使我不知道从哪里开始。这就是为什么我很抱歉我可以添加更多信息。我可能也应该添加“android”标签,但我只能添加 5 个标签(我知道,初学者的规则很低,对吧?)。无论如何,我什至看不到任何 任务......我想这是我的问题。今天早上我终于找到了解决方案。这很简单,但隐藏得很好……至少对我来说。不过谢谢...
  • 您介意与他人分享您的解决方案吗?
  • 当然!我正在吃午饭!我想我被原谅了,对吧?但我正在写一个解决方案。几分钟后,我将发布详细指南,说明问题所在以及如何解决!!!
  • 我的意思是“当然不是”,当然! :-P 好的,这对我来说是最好的解决方案。正如我所说,它非常不优雅(我知道这一点),但它对我来说是最简单的,因为我总是使用 UTF-8 文件。最好的问候!

标签: java ant character-encoding


【解决方案1】:

您是否正确地为编译器指定了文件编码?否则,java 编译器将默认使用平台的默认编码,在 Windows 上(例如)不是 UTF-8。编码是通过使用 javac 的 -encoding 标志来指定的。

javac -encoding utf8 ...

在 ant build.xml 中:

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

【讨论】:

  • 谢谢,在这个过山车上。完美运作
【解决方案2】:

只需在 build.xml 脚本中指定编码:

<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 以覆盖每个项目的编码。

【讨论】:

    【解决方案3】:

    你应该在很多地方设置同一个页面:

    1. 在 Ant 脚本中 javac encoding="UTF-8" ... /
    2. -Dfile.encoding=UTF-8 在 Ant 调用的参数中
    3. 在 file-properties-resource-encoding - 再次选择同一页面。您还可以通过 IDE 为容器中的所有文件更改它(Eclipse 的首选项)。然后让所有文件从容器中继承。

    4. 如果某些文件以错误的编码创建,请通过 PsPad 或其他文本编辑器重新编辑其内容(复制粘贴、更改文件编码、返回复制粘贴)。这些文件将在unmappable character 错误中提及。

    设置所有这四个问题后,您将没有unmappable character 行。

    【讨论】:

      【解决方案4】:

      致所有在 Windows 上使用 UTF-8 源文件并尝试使用 the famous blog post by Dan Galpin/Tim Bray 使用 Proguard 构建 Android 包的人。

      javac 会出现这种编码问题(感谢 JesperE 的提示)。但是,我无法在我的项目文件上创建新的 javac 规则,因为需要的参数我一无所知。所以这是简单的答案(可能不是唯一的答案):

      1. 尝试通常的“ant release”命令。
      2. 请注意,在开始时,有一个输出谈论一些导入的 ANT 规则。一开始你会看到一些[设置]规则。寻找这个:

        [设置] 导入规则文件:tools\ant\ant_rules_r3.xml

      3. 找到该文件并打开它。搜索“javac 编码”。你会看到它被设置为“ascii”。改为“UTF-8”。

      4. 再做一次“蚂蚁释放”就可以了。

      这就是我在这里所做的。我确信有一种方法可以在每个项目的基础上覆盖它。但正如我所说,它不断给我强制参数的错误。所以至少对我来说这样做更容易。此外,无论如何我只使用 UTF-8。

      【讨论】:

      • 我知道这不是最好的解决方案(不是每个项目的解决方案)。但在我学习 javac 和 ant 内部工作之前,这就是我要做的,并且最适合我的问题。如果您这样做,请记住您正在更改 SDK 上的选项。你已经被警告了!
      【解决方案5】:

      下面是ant build.xml文件中-Dfile.encoding=UTF-8的用法:

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

      这将解决问题。适用于所有 UTF 8 字符。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-31
        • 2012-09-04
        • 1970-01-01
        • 1970-01-01
        • 2014-08-30
        • 1970-01-01
        相关资源
        最近更新 更多