0

我有一个 PLC 应用程序,它需要 UTF-16LE 的 Unicode 格式来支持重音字符。我构建文本并将其转换为:

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

记事本添加了 BOM,而 UTF-16LE 没有。我对 ruby​​ 语法有点不确定,但是是这样的:

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 回答