我对 Ruby (1.9.3) 和 Powershell 有疑问。
我需要编写一个交互式控制台应用程序来处理波兰语中的句子。我得到了帮助,可以用波兰语变音符号检索 ARGV 元素,但标准输入无法按我的意愿工作。
代码说明:
# encoding: UTF-8
target = ARGV[0].dup.force_encoding('CP1250').encode('UTF-8')
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ą"
STDIN.set_encoding("CP1250", "UTF-8")
# the line above changes nothing, it can be removed and the result is still the same
# I obviously wanted to mimic the ARGV solution
target2 = STDIN.gets
puts "target2 = " +target2
puts target2.bytes.to_a.to_s
puts target2.encoding
puts target2.eql? "dupą"
输出:
string constant = dupą
[100, 117, 112, 196, 133]
UTF-8
target = dupą
[100, 117, 112, 196, 133]
UTF-8
true
dupą //this is fed to STDIN.gets
target2 = dup
[100, 117, 112]
UTF-8
false
显然 Ruby 从未从 STDIN.gets 中获得第四个字符。如果我写一个更长的字符串,比如dupąlalala
,程序中仍然只有三个初始字节。
- 我尝试过枚举字节并使用 getc 循环,但它们似乎从未到达 Ruby(它们在哪里丢失?)
- 我用过 chcp 65001 (似乎没有改变)
我已将 $OutputEncoding 更改为 [Console]::OutputEncoding; 现在看起来像这样:
IsSingleByte : True BodyName : ibm852 EncodingName : Środkowoeuropejski (DOS) HeaderName : ibm852 WebName : ibm852 WindowsCodePage : 1250 IsBrowserDisplay : True IsBrowserSave : True IsMailNewsDisplay : False IsMailNewsSave : False EncoderFallback : System.Text.InternalEncoderBestFitFallback DecoderFallback : System.Text.InternalDecoderBestFitFallback IsReadOnly : True CodePage : 852
我正在使用 Consolas 字体
如何在 Powershell 中正确阅读波兰语变音符号?