gpt4 book ai didi

ruby - STDIN 和 Powershell - 如何使编码匹配?

转载 作者:数据小太阳 更新时间:2023-10-29 07:19:27 27 4
gpt4 key购买 nike

我对 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 中正确阅读波兰语变音符号?

最佳答案

我找到了一些相关信息。不确定这是完全正确的信息。但是,嘿,OP 已经有了另一个解决方案。

# Get "encoding" for code page 1250 (Central European)
$en=[System.Text.Encoding]::GetEncoding(1250)
# Looks like this:
IsSingleByte : True
BodyName : iso-8859-2
EncodingName : Central European (Windows)
HeaderName : windows-1250
WebName : windows-1250
WindowsCodePage : 1250
IsBrowserDisplay : True
IsBrowserSave : True
IsMailNewsDisplay : True
IsMailNewsSave : True
EncoderFallback : System.Text.InternalEncoderBestFitFallback
DecoderFallback : System.Text.InternalDecoderBestFitFallback
IsReadOnly : True
CodePage : 1250

# Change STDIN's input encoding
[console]::InputEncoding=$en
$x = Read-Host
# I typed in dupą
# (I set Polish in Languate Bar.
# Final letter is apostrophe on US English keyboard)
[int[]][char[]]$x
# output is: 100 117 112 261 (in hex): 64 75 70 105
# the final character (261) is "Latin Small Letter A with Ogonek"

关于ruby - STDIN 和 Powershell - 如何使编码匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10803595/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com