У меня проблема с Ruby (1.9.3) и Powershell.STDIN и 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
Видимо Руби никогда не получает четвертый персонаж из STDIN.gets. Если я напишу более длинную строку, например dupąlalala
, все еще только три начальных байта появляются в программе.
- Я попытался перечислить байты и перекручивание с GETC, но они никогда не достичь рубин (где они потеряли?)
- Я использовал 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?
Работает ли он при вызове из файла cmd.exe, отличного от PowerShell? –
Я знаю, что этот вопрос очень старый, но в любом случае: это не работает в простой cmd.exe. Тот же пример (с изменением кодировок, конечно) работает в Linux. Я перестроил свой проект для использования файлов вместо стандартного ввода. –
Я знаю, что этот вопрос очень старый, но так или иначе: МЫ СПРОСИТЕ ОТВЕТ! ;) – Henrik