当前位置: 首页 > 知识库问答 >
问题:

不能让Ant用unicode (c)字符写正确的版本信息

谭光辉
2023-03-14

将ant从1.6升级到1.8.3版本后,Windows的信息资源。用Ant构建的dll已损坏。

以前,此值已正确保存到version-info资源中:

< code > product . Copyright = \ u00a 9 Copyright 20xx-20xx yyyyyyyyy \ u 2122 (so(c)和TM符号显示正确)。

升级后Ant默认编码更改为UTF-8,这是意料之中的,但目前版权字符串如下所示:

© Copyright 20xx-20xx yyyyyy ™

这不是控制台问题-我用十六进制编辑器和文件属性对话框检查过-两者都显示不正确。

查看文件的< code>hexdump,我看到了下面的(明显不正确的)映射

\u00a9 -> 0x00c2 0x00a9
\u2122 -> 0x00e2 0x201e 0x00a2

这里的问题是 Ant 将 UTF-8 字节(不是 Unicode 字符串)编码为 16 位字符,并将其写入版本信息。

虽然这看起来像是ant中的一个bug,但我想问问是否有人设法找到了解决这个问题或类似问题的方法

以下是脚本的一些片段:项目属性文件:

...
product.copyright=(c) Copyright 2005-2012 Clarabridge
....

build.xml中包含的文件:

<versioninfo id="current-version" if="is-windows"
    fileversion="${product.version}"
    productversion="${product.version}"
    compatibilityversion="1"
    legalcopyright="${product.copyright}"
    companyname="${product.company}"
    filedescription="${ant.project.name}"
    productname="${ant.project.name}"
/>
...
<cc objdir="${target.dir}/${target.platform}/obj"
    outfile="${target.dir}/${target.platform}/${ant.project.name}"
    subsystem="other"
    failonerror="true"
    incremental="false"
    outtype="shared"
    runtime="dynamic"
>
    <versioninfo refid="current-version" />
    <compiler refid="compiler-shared-${target.platform}" />
    <compiler refid="rc-compiler" />
    <linker extends="linker-${target.platform}">
        <libset dir="${target.dir}/${target.platform}/lib" libs="${lib.list}" />
    </linker>

    <fileset dir="${src.dir}" casesensitive="false">
        <include name="*.cpp"/>
    </fileset>
</cc>

共有1个答案

孟鸿朗
2023-03-14

您的错误是某些东西将UTF-8字符误解为8位字符!!!

顺便说一句,Java不使用16位字符;那将是UCS-2。Java使用UTF-16,它和UTF-8一样是可变宽度编码。让多少Java程序员苦恼!

UTF-8有8位代码单元,而UTF-16有16位代码单元;两者都不支持“8位字符”或“16位字符”。如果您发现自己编写的代码认为他们支持,那么您只是编写了错误的代码。

您的输出是错误地显示 UTF-8 的结果,就好像它是拉丁语 1,它确实使用 8 位字符。但是,您没有。

 类似资料:
  • 我在Win 7下运行的是Ant 1.8.1。而我的Java版本是1.7_17。 我在我的构建文件中添加了以下2行用于诊断。 而结果就是 知道发生了什么吗? 蚂蚁1.8.1中的硬编码是它能显示的最高java版本是1.6吗?

  • 我在安装了Javajdk(和jre)1.6的Unix机器上通过Eclipse Juno生成了一个ant文件。当在build.xml文件所在的eclipse之外的机器上运行ant时,一切都很顺利。 现在,问题是当我尝试在另一台机器上运行ant时,其中jdk和jre 1.6都安装了。这是我在运行RedHat 3的另一台机器上得到的结果(无法更改): 当我在build.xml文件中添加这一行时,我得到以

  • 问题内容: 例如,如何转换字符串。我从网站获得的字符串,未在中进行编码。它工作在计划只是罚款使用Swing( ),但是当我过去的链接罐子Windows控制台(要运行的应用程序),它不显示在字符串中正确的字符的字符和。 我从网站上得到那串 。如何在Swing应用程序中进行编码或显示,因此当我运行应用程序时,它将向我显示此字符(以及课程的其他unicode字符(“Ž”,“ž”,“č”和“Š”) )?

  • 我需要将输入字符串中的unicode字符转义为UTF-16或UTF-32转义序列。例如,输入字符串文字< code >“吃,喝,愛" 应该转义为< code >“吃喝,\ u611b”。以下是排序表中的规则: Escape | Unicode码位 “\u” 十六进制 十六进制 十六进制|U 到 U FFFF 范围内的 Unicode 代码点(包括与编码的十六进制值相对应)。 '\U'HEX HEX

  • 我正在尝试将纯文本文件加载到中,由(到列表中)或(到)分隔。每个对话框块可以是不同的长度。 我有一个简单的读取文件行,它读取txt文件的每一行,并将每一行作为一个新项添加到中。下面的代码是我试图整理原始数据并创建双列表的地方。 代码中有一个问题,我似乎找不到如何修复它。现在我得到的结果是:输出text1,输出text1+text2,输出text1+text2+text3,以此类推。 在将列表添加到

  • 问题内容: 我使用函数对AJAX发送到PHP的JS对象进行字符串化处理。 当JSON.stringify函数将Unicode字符编码为格式(例如)时,就会出现问题。我的问题是如何在PHP中将这些字符转换为常规unicode字符? 问题答案: 看到输出UTF-16?有点卡住 这将转换为UTF-8: