我发现自己被迫在Windows 7(家庭高级版)上使用Ruby,而且我在编码方面遇到了很多问题。只要我不需要控制台输入,我就相当不错,但现在我受到了阻碍。
我正在使用Powershell ISE并执行命令chcp 65001
以使其成为utf-8。我对ruby程序的输入仍然与Ruby内部的内容不兼容。我用RubyInstaller 1.9.3安装了Ruby。
好的,那么问题是什么?
我写了一个简短的例子:
# encoding: UTF-8
target = ARGV[0]
puts "string constant ="+ "dupą"
puts "dupą".bytes.to_a.to_s
puts "dupą".encoding
puts "target =" +target
puts target.bytes.to_a.to_s
puts target.encoding
puts target.eql? "dupą"
好的,现在让我们运行这个例子:
PS C:\Users\user\ruby\2> ruby example.rb dupą
string constant =dupą
[100, 117, 112, 196, 133]
UTF-8
target =dup�
[100, 117, 112, 185]
UTF-8
false
因此两个相同字符串中的字节不同,但它们仍然被识别为UTF-8。
显然我错过了一些东西。我错过了什么?
答案 0 :(得分:1)
因为我的键盘上没有你特别的字符我用了其他的东西。 您需要确保您的ruby脚本以UTF-8编码本身保存。 然后试试这个,在第二行用你的cp替换cp。成功!!
# encoding: utf-8
target = ARGV[0].dup.force_encoding('CP1252').encode('UTF-8') # => true
#target = ARGV[0] # => false
puts "string constant = déjà"
puts "déjà".bytes.to_a.to_s
puts "déjà".encoding
puts "target =" +target
puts target.bytes.to_a.to_s
puts target.encoding
puts target.eql? "déjà" # =>true
答案 1 :(得分:0)
尝试将$OutputEncoding
变量设置为UTF8Encoding
或UnicodeEncoding
。
$ OutputEncoding
Determines the character encoding method that Windows PowerShell uses when it sends text to other applications. For example, if an application returns Unicode strings to Windows PowerShell, you might need to change the value to UnicodeEncoding to send the characters correctly. Valid values: Objects derived from an Encoding class, such as ASCIIEncoding, SBCSCodePageEncoding, UTF7Encoding, UTF8Encoding, UTF32Encoding, and UnicodeEncoding. Default: ASCIIEncoding object (System.Text.ASCIIEncoding)
答案 2 :(得分:0)
在PSISE试试这个。
ruby example.rb(([Text.Encoding] :: UTF8.GetString((100,117,112,196,133))))
答案 3 :(得分:0)
请尝试以下语法:
$OutputEncoding = [System.Text.Encoding]::UTF8