【问题标题】:How do I work with UTF-16LE source code in Ruby?如何在 Ruby 中使用 UTF-16LE 源代码?
【发布时间】:2010-11-20 18:50:30
【问题描述】:

我在UTF-16LE 中有以下名为test.rb 编码的文件

# encoding: UTF-16LE

test = "test!"
p test

使用以下命令运行它不会产生任何结果

ruby ./test.rb

我在这里错过了什么?


如果有人想知道,我尝试将源设置为 UTF-16LE 编码的原因是我正在使用 UTF-16LE 输入和输出文件编码。我的印象是,如果我在读取文件时正确设置编码并在输出时正确设置编码并且我在源代码中正确设置了# encoding:,那么一切都应该正常工作。如果有人对此(或更简单的方法)有任何问题,请随时告诉我。

【问题讨论】:

  • 以编码方式编写源代码与读取或写入文件的编码方式无关。
  • @Greg 那么你的意思是,如果我的源代码是 UTF-8 并且我将字符串写入 UTF-16LE 文件,它会自动转换为正确的编码?跨度>
  • 没有。它不会自动转换。您必须告诉 Ruby 您的文件 I/O 的编码方式。请参阅 Mladen Jablanović 的回答,因为他为您指明了正确的方向。
  • 澄清一下:如果我告诉 ruby​​ 将我的输出文件编码为 UTF-16,我的所有字符串会在写入之前进行转换吗?字符串编码是源文件编码(除非指定),对吧?

标签: ruby macos encoding utf-16le


【解决方案1】:

使用 UTF-16 编写程序以处理 UTF-16 文件听起来就像用俄语命名变量以创建俄语网站一样。 :)

Ruby 1.9 支持字符串编码,James Gray 有一篇关于该主题的 excellent series 文章 - 我认为它们是 Ruby 编码的参考指南。

简而言之,您可以在打开输入文件时指定输入文件的编码:

s = ''
File.open('utf16le.txt', 'rb:UTF-16LE') do |f| # here you set the encoding
  s = f.read
end
p s.encoding
#=> #<Encoding:UTF-16LE>
p s.length
#=> 19
p s
#=> "test\nmladen\n\u0436\u045F\u0446\u0432\u0431\n\n"

所有内容也在 1.9 IO 类的文档中:

http://ruby-doc.org/ruby-1.9/classes/IO.html

【讨论】:

  • 知道为什么我的代码不起作用吗?我唯一的猜测是终端不支持UTF-16LE文本并且不显示,但我认为它至少会输出\uXXX代码。
  • 特别是,James Gray 文章中的“默认外部和内部编码”部分与 OP 的问题密切相关。
猜你喜欢
  • 1970-01-01
  • 2015-02-03
  • 2010-10-27
  • 2020-01-12
  • 2015-02-17
  • 2022-03-06
  • 1970-01-01
  • 2014-08-14
  • 2021-07-05
相关资源
最近更新 更多