4

パス名に「 î 」という文字を含むファイルを WiX スクリプトに追加しました。Light.exe は次のように文句を言います:

指定されたデータベース コード ページ '1252' では使用できない文字を含む文字列が提供されました

問題の文字は、Windows-1252 エンコーディングの 0xEE、つまり、UTF-8 の 0x00EE Unicode または 0xC3AE です。これらのファイルは、heat.exe によって生成された wxs ファイルにあり、この xml は UTF-8 としてエンコードされています。

エラーメッセージは、データベースが 1252 のときに UTF エンコーディングで文字を入力しようとしたという事実から来ていると思いますか? UTF は Windows インストーラーで実際にはサポートされていないため ( WiX のドキュメントで説明されているように)、1252 または iso-8859 でエンコードされた入力 xml を使用する必要がありますか? もしそうなら、heat.exe にその出力に別のエンコーディングを使用するように指示できますか?

私の質問はこれに似ています: heat.exe を活用し、すでにローカライズされたファイル名を収集し、それらを wix を使用して msi に含めますが、違いは、その場合、文字が「真の」非 ansi 文字であるということです。 1252 で正しくエンコードされますが、utf-8 入力ファイルからの変換が機能しないようです。

4

1 に答える 1

1

WiX ツールセットは次のようにコードページを検証します (大まかに):

encoding = Encoding.GetEncoding(codepage, new EncoderExceptionFallback(),
                                          new DecoderExceptionFallback());
writer = new StreamWriter(idtPath, false, encoding);
try
{
   // GetBytes will throw an exception if any character doesn't
   // match our current encoding
   rowBytes = writer.Encoding.GetBytes(rowString);
}
catch (EncoderFallbackException)
{
    rowBytes = convertEncoding.GetBytes(rowString);

    messageHandler.OnMessage(WixErrors.InvalidStringForCodepage(
                                row.SourceLineNumbers,
                                writer.Encoding.WindowsCodePage));
}

NETFX がその「i」を正しく変換していない可能性があります。XML でコードページを明示的に設定すると役立つ場合があります。熱からそれを行うには、XSLT を使用するか (XSL を介して XML ドキュメントのコードページを変更しようとしたことはありませんが、可能だと思われます)、ドキュメントをポストエディットします。

于 2013-04-22T12:43:14.833 に答える