我可以使用 Ruby 以编程方式将 "I’d" 转换为 "I’d" 吗?
Can I programmatically convert "I’d" to "I’d" using Ruby?
我似乎找不到 String#encode
恶作剧的正确组合。
我希望您的脚本使用编码 cp1251 并且您有 ruby >= 1.9。
那么你可以使用force_encoding
:
#encoding: cp1251
#works also with encoding: binary
source = 'I’d'
puts source.force_encoding('utf-8') #-> I’d
如果我的例外是错误的:你使用哪种编码以及哪个 ruby 版本?
一点背景:
编码问题很难分析。之间可能存在冲突:
- 源代码的编码(由编辑器定义)。
- 源代码的预期编码(在第一行用
#encoding
定义)。这被 ruby. 使用
- 字符串编码(参见 http://nuclearsquid.com/writings/ruby-1-9-encodings/ 中的字符串编码部分)
- 输出编码shell
我想我对这个感到困惑,所以我会 post 在这里希望能帮助其他同样困惑的人。
我试图在 irb
会话中进行编码,这给了你
irb(main):002:0> 'I’d'.force_encoding('UTF-8')
=> "I’d"
如果你尝试使用 encode
而不是 force_encoding
那么你会得到
irb(main):001:0> 'I’d'.encode('UTF-8')
=> "I’d"
这是 irb
设置为使用 UTF-8 的输出和输入编码。在我的例子中,按照我想要的方式转换该字符串涉及告诉 Ruby 源字符串采用 windows-1252
编码。你可以通过使用 -E
参数来做到这一点,你在其中指定了 `inputencoding:outputencoding' 然后你得到这个
$ irb -EWindows-1252:UTF-8
irb(main):001:0> 'I’d'
=> "I\xC3\xA2\xE2\x82\xAC\xE2\x84\xA2d"
这看起来不对,除非你把它输出,这给出了这个
$ ruby -E Windows-1252:UTF-8 -e "puts 'I’d'"
I’d
万岁。我不确定为什么 Ruby 将其显示为 "I\xC3\xA2\xE2\x82\xAC\xE2\x84\xA2d"
(与终端的代码页有关?)因此,如果有人可以发表评论并提供更深入的见解,那就太好了。
我似乎找不到 String#encode
恶作剧的正确组合。
我希望您的脚本使用编码 cp1251 并且您有 ruby >= 1.9。
那么你可以使用force_encoding
:
#encoding: cp1251
#works also with encoding: binary
source = 'I’d'
puts source.force_encoding('utf-8') #-> I’d
如果我的例外是错误的:你使用哪种编码以及哪个 ruby 版本?
一点背景: 编码问题很难分析。之间可能存在冲突:
- 源代码的编码(由编辑器定义)。
- 源代码的预期编码(在第一行用
#encoding
定义)。这被 ruby. 使用
- 字符串编码(参见 http://nuclearsquid.com/writings/ruby-1-9-encodings/ 中的字符串编码部分)
- 输出编码shell
我想我对这个感到困惑,所以我会 post 在这里希望能帮助其他同样困惑的人。
我试图在 irb
会话中进行编码,这给了你
irb(main):002:0> 'I’d'.force_encoding('UTF-8')
=> "I’d"
如果你尝试使用 encode
而不是 force_encoding
那么你会得到
irb(main):001:0> 'I’d'.encode('UTF-8')
=> "I’d"
这是 irb
设置为使用 UTF-8 的输出和输入编码。在我的例子中,按照我想要的方式转换该字符串涉及告诉 Ruby 源字符串采用 windows-1252
编码。你可以通过使用 -E
参数来做到这一点,你在其中指定了 `inputencoding:outputencoding' 然后你得到这个
$ irb -EWindows-1252:UTF-8
irb(main):001:0> 'I’d'
=> "I\xC3\xA2\xE2\x82\xAC\xE2\x84\xA2d"
这看起来不对,除非你把它输出,这给出了这个
$ ruby -E Windows-1252:UTF-8 -e "puts 'I’d'"
I’d
万岁。我不确定为什么 Ruby 将其显示为 "I\xC3\xA2\xE2\x82\xAC\xE2\x84\xA2d"
(与终端的代码页有关?)因此,如果有人可以发表评论并提供更深入的见解,那就太好了。