0

アクセント付き文字をサポートするために UTF-16LE の Unicode 形式を必要とする PLC アプリケーションがあります。テキストを作成し、次のように変換します。

str = Iconv.conv("utf-16le", "utf-8", str)

次に、次のファイルを出力します。

send_data str, :filename => "sp_table.txt", :type => 'text/plain; charset=utf-16le; header=present;', :disposition => 'attachment'

PLC アプリケーションが文字を表示できません。でファイル タイプのプロパティを読み取るとfile -I、次のようになります。

sp_table.txt: application/octet-stream; charset=binary

Windows のメモ帳でファイルを開くと、正しく表示されます。エンコードとして Unicode を選択して、メモ帳でファイルを再保存すると、次のようにfile -I返されます。

sp_table.txt: text/plain; charset=utf-16le

また、メモ帳で保存した後、PLC アプリケーションですべての文字を正しく表示できます。

ファイルを送信するときに別の文字セットを指定する必要がありますか?

4

1 に答える 1

1

Notepad は BOM を追加しますが、UTF-16LE は追加しません。私はルビーの構文に少し不安がありますが、次のようなものです:

str = Iconv.conv("utf-16le", "utf-8", "\ufeff" + str)

または

str = "\xFF\xFE" + Iconv.conv("utf-16le", "utf-8", str)

または

str = "\377\376" + Iconv.conv("utf-16le", "utf-8", str)

基本的には、バイト0xFF 0xFE(Little Endian UTF-16 の BOM) を送信前に先頭に追加するという考え方です。

于 2012-12-19T19:24:22.127 に答える