Ruby:如何将文件保存到UTF-16 Little-Endian

Ruby:如何将文件保存到UTF-16 Little-Endian,ruby,unicode,utf-8,utf-16,utf-16le,Ruby,Unicode,Utf 8,Utf 16,Utf 16le,我想用UTF-16 Little-Endian将®保存到一个txt文件中,我在某些方面进行了测试 1.下面的编码是UTF-8 2.下面的编码是UTF-16大端码 mentod Iconv.conv不支持UTF-16 LE类型 如何使用UTF16 LE保存output.txt?最简单的方法是首先以UTF-16LE的形式打开文件: register_mark = "\00ua3" # or even just: register_mark = ® File.open('C:/Output.txt'

我想用UTF-16 Little-Endian将®保存到一个txt文件中,我在某些方面进行了测试

1.下面的编码是UTF-8

2.下面的编码是UTF-16大端码

mentod 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
这里重要的一点是使用
file.new
方法(或在本例中,
file.open
)的
选项中的
:encoding
键显式指定文件的编码。这样,写入文件的字符串将自动转换,无论它们采用何种编码

我还冒昧地将您的代码更改为更地道的Ruby风格:

  • Ruby社区使用
    snake\u case
    ,而不是
    CamelCase
    作为变量和方法名
  • 应该避免使用全局变量,尤其是因为在您的示例中,它们完全是多余的
  • 这里真的不需要使用
    Array#pack
    ,只需写下你想要的
  • 尽可能使用
    File.open
    的块形式,它将为您关闭文件,即使在出现错误或异常的情况下也是如此
  • 处理文本文件时,应始终传递
    t
    修饰符。它在大多数操作系统上没有任何区别(这就是为什么,不幸的是,大多数Rubyists忘记通过它的原因),但在Windows上它是至关重要的,这就是您似乎正在使用的

    • 有点老套,但这对我来说很管用。具体来说,我试图让ruby输出UTF-16LE w/BOM

      ## Adds BOM, albeit in a somewhat hacky way.
      new_html_file = File.open(foo.txt, "w:UTF-8")
      new_html_file << "\xFF\xFE".force_encoding('utf-16le') + some_text.force_encoding('utf-8').encode('utf-16le')
      
      ##添加BOM,尽管有点老套。
      new_html_file=file.open(foo.txt,“w:UTF-8”)
      新的html文件您确定它不支持
      UTF-16LE
      ?有很多特色的ruby/iconv转换到UTF-16LE和从UTF-16LE到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
      
      ## Adds BOM, albeit in a somewhat hacky way.
      new_html_file = File.open(foo.txt, "w:UTF-8")
      new_html_file << "\xFF\xFE".force_encoding('utf-16le') + some_text.force_encoding('utf-8').encode('utf-16le')