首页 > 解决方案 > Windows 10终端输入上的Ruby irb utf-8编码问题

问题描述

我想在我的窗口中使用带有终端输入的 ruby​​。为什么 ruby​​ 社区不能在 windows 上解决这个 UTF-8 问题?难吗?我想知道 python、java 或其他语言是如何做到这一点的?我可以毫无痛苦地在 windows utf-8 上使用 python 工作。

使用红宝石 3​​.0.1

x = gets.chomp
çağrı
=> "\x87a\xA7r\x8D"

puts x
�a�r�
=> nil

x.valid_encoding?
=> false

我查了这个https://bugs.ruby-lang.org/issues/16604 它没有用。

标签: rubywindowsencodingutf-8irb

解决方案


在 Ruby 3.0 中,默认的外部编码(即在使用时从 ruby​​ 进程外部读取的任何数据的假定编码,例如从您的 shell 中读取的数据gets)在 Windows 上更改为 UTF-8。这是对 Windows 上发生的各种编码问题的响应。

但是,您从 shell 中读取的数据不是 UTF-8 编码的。相反,您的 shell 似乎使用了一些不同的编码,例如cp850.

一种可能的解决方法是指示 Ruby 假设您的环境的语言环境编码,您可以使用-E命令调用上的开关进行设置,例如:

irb -E locale

或通过Encoding.default_external在脚本中手动设置为环境的正确编码。


推荐阅读