0

一部のマシンでは、NSISインストーラーが1つの間違った文字でフォルダーを作成します。

NSISはńcharでフォルダを作成することになっていた

// U+0144   ń   c5 84   LATIN SMALL LETTER N WITH ACUTE

代わりに、ñcharでフォルダを作成しました

// U+00F1   ñ   c3 b1   LATIN SMALL LETTER N WITH TILDE

有線の部分は一部のマシンでのみ発生し、再現できませんでした。私の知る限り、これはWindows Vista(おそらくベーシックエディション)でのみ報告されました。

これは、Windows-1250からUTFへの変換と関係があると思います。NSISはまだUTFをサポートしていないため、Windows-1250でエンコードされたスクリプトファイルを使用しています。ńcharはUTFに変換され、変換される必要がありますが、代わりにインストーラーがcharを使用してフォルダーを作成します。一方、これはWindows-1252と同等です。0xF1U+c584U+c3b1U+c3b10xF1

コンパイルされたインストーラーを実行すると、NSISスクリプトで使用される文字の解釈に何が影響する可能性がありますか?期待される変換を保証する方法0xF1=> U+c584

4

1 に答える 1

0

NSISソーススクリプトのエンコーディングは実際には最終的な文字列を決定しません。スクリプト/インストーラからUnicode文字列へのバイトの変換はエンドユーザーのシステムで行われるため、ASCII以外の文字はシステムのデフォルトのコードページ(言語非Unicodeプログラム(システムロケール))。

このディレクトリ名のカスタムLangStringを作成してみることができます。これを機能させるには、ńを入力するときにエディターのコードページを問題のあるコードページに設定する必要があります。おそらく、.onInitとStrCpyで$ LANGUAGEをチェックする(またはSystem::Call kernel32::GetACP()i.r0$ 0を使用してチェックする)ことでこれをエミュレートできます。この文字列は、このシステムで問題のある変数に正しく変換されます。

次のNSISバージョンはおそらくv3.0で、どこから2.50を入手したかはわかりませんが、おそらくUnicodeフォークで使用される単なるプレースホルダーです。

于 2012-04-17T21:01:41.590 に答える