Ant を 1.6 から 1.8.3 にアップグレードした後、Ant でビルドされた Windows .dll のバージョン情報リソースが破損しました。
以前は、この値は version-info リソースに適切に保存されていました。
product.copyright=\u00a9 Copyright 20xx-20xx yyyyyyyyyy \u2122
(したがって、(c) と TM 記号は正しく表示されました)。
Ant のアップグレード後、デフォルトのエンコーディングは予期される UTF-8 に変更されましたが、現在、著作権文字列は次のようになっています。
© Copyright 20xx-20xx yyyyyy ™
これはコンソールの問題ではありません。16 進エディタと [ファイルのプロパティ] ダイアログで確認しましたが、どちらも正しく表示されません。
ファイルhexdump
を見ると、次の(明らかに間違った)マッピングが発生していることがわかります
\u00a9 -> 0x00c2 0x00a9
\u2122 -> 0x00e2 0x201e 0x00a2
ここでの問題は、Ant が (Unicode 文字列ではなく) UTF-8 バイトを 16 ビット文字にエンコードし、それを version-info に書き込むことです。
これは ant のバグのように見えますが、誰かがこの問題または同様の問題の回避策を見つけることができたかどうかを尋ねたいと思います。
スクリプトの一部を次に示します。 プロジェクト プロパティ ファイル:
...
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>