Вход PowerShell ISE UTF8 отличается от ввода Руби - PullRequest
2 голосов
/ 02 апреля 2012

Я вынужден работать с Ruby в Windows 7 (Home Premium), и у меня было много проблем с кодированием. Пока я не нуждался в консольном вводе, я был довольно хорош, но теперь я в тупике.

Я использую Powershell ISE и выполнил команду chcp 65001, чтобы сделать его utf-8. Тем не менее, мой вклад в программы ruby ​​несовместим с тем, что находится внутри Ruby. Я установил Ruby с RubyInstaller 1.9.3. Хорошо, в чем проблема?

Я написал короткий пример:

# 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.

Очевидно, я что-то упустил. Чего мне не хватает?

Ответы [ 4 ]

1 голос
/ 02 апреля 2012

, так как у меня нет специального символа на моей клавиатуре, я использовал другой. Вы должны быть уверены, что ваш скрипт ruby ​​сохранен в самой кодировке UTF-8. Затем попробуйте это, во второй строке замените 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
0 голосов
/ 17 сентября 2013

Попробуйте следующий синтаксис:

$OutputEncoding = [System.Text.Encoding]::UTF8
0 голосов
/ 02 апреля 2012

вы могли бы опечатку?

попробуйте это на PSISE.

ruby ​​example.rb (([Text.Encoding] :: UTF8.GetString ((100, 117, 112, 196, 133))))

0 голосов
/ 02 апреля 2012

Попробуйте установить для переменной $OutputEncoding значение UTF8Encoding или UnicodeEncoding.

С about_Preference_Variables :

$ 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...