我想用UTF-16 Little Endian将®保存到txt文件中,我通过一些方式进行了测试
1.下面的编码是UTF-8
$RegisterMark=[174].pack('U*')
file = File.new("C:/Output.txt","w")
file.puts $RegisterMark
file.close
2.下面的编码是UTF-16 Big Endian
require 'iconv'
$RegisterMark=[174].pack('U*')
$utf16RegisterMark =Iconv.conv('UTF-16', 'UTF-8', $RegisterMark )
file = File.new("C:/Output.txt","w")
file.puts $utf16RegisterMark
file.close
Iconv.iconv 方法不支持 UTF-16 LE 类型。
如何使用 UTF16 LE 保存 output.txt?
最简单的方法是首先以 UTF-16LE 格式打开文件:
register_mark = "\00ua3" # or even just: register_mark = ®
File.open('C:/Output.txt', 'wt', encoding: 'UTF-16LE') do |f|
f.puts register_mark
end
这里重要的一点是使用显式指定文件的编码:encoding
键入options
Hash
of the File.new
方法(或者在这种情况下,File.open
)。这样,写入文件的字符串将被自动转换,无论它们采用什么编码。
我还冒昧地将您的代码更改为更惯用的 Ruby 风格:
- Ruby 社区使用
snake_case
, not CamelCase
用于变量和方法名称。
- 应避免全局变量,特别是因为在您的示例中,它们无论如何都是完全多余的。
- 实在没必要用
Array#pack
在这里,写下你想要的内容。
- 只要有可能,请使用块形式
File.open
,即使出现错误或异常,它也会为您关闭文件。
- 处理文本文件时,您应该始终传递
t
修饰符。它在大多数操作系统上没有任何区别(不幸的是,这就是为什么大多数 Rubyists 忘记传递它),但它是crucial在 Windows 上,这就是您似乎正在使用的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)