jsj*_*wql 3 ruby unicode utf-8 utf-16 utf-16le
我想将®保存到带有UTF-16 Little Endian的txt文件中,我在某些方面进行了测试
1.下面的编码是UTF-8
Run Code Online (Sandbox Code Playgroud)$RegisterMark=[174].pack('U*') file = File.new("C:/Output.txt","w") file.puts $RegisterMark file.close
2.下面的编码是UTF-16 Big Endian
Run Code Online (Sandbox Code Playgroud)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.conv不支持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
Run Code Online (Sandbox Code Playgroud)
这里最重要的一点是要明确指定文件的编码,用:encoding在关键options Hash的的File.new方法(或在这种情况下,File.open).这样,写入文件的字符串将自动转换,无论它们处于何种编码状态.
我也冒昧地将您的代码更改为更惯用的Ruby风格:
snake_case不CamelCase使用变量和方法名称.Array#pack,只需记下你想要的东西.File.open,即使出现错误或异常,也会为您关闭文件.t修饰符.它对大多数操作系统没有任何影响(不幸的是,大多数Rubyist忘记传递它的原因),但它在Windows上是至关重要的,这就是你似乎正在使用的东西.| 归档时间: |
|
| 查看次数: |
4896 次 |
| 最近记录: |