【问题标题】:Display Extended-ASCII character in Ruby在 Ruby 中显示扩展 ASCII 字符
【发布时间】:2015-04-26 02:16:04
【问题描述】:

如何将扩展 ASCII 字符打印到控制台。例如,如果我使用以下

puts 57.chr

它将在控制台打印“9”。如果我要使用

puts 219.chr

它只会显示一个“?”。它对从 128 到 254 的所有扩展 ASCII 代码执行此操作。有没有办法显示正确的字符而不是“?”。

【问题讨论】:

  • 请注意,“扩展 ASCII”是一个总称,它并不指特定的字符编码。
  • 我正在尝试使用绘图字符在我的控制台程序中创建图形。我不能使用诅咒之类的东西。 ASCII 码 219 是一个实心块。
  • 您应该使用 Unicode/UTF-8(除非您必须支持旧系统)。见Block ElementsBox-drawing
  • 例如,如果我要使用 Unicode 字符 U+2588(完整块),我将如何在 Ruby 中将其打印到控制台。

标签: ruby extended-ascii


【解决方案1】:

我正在尝试使用绘图字符在我的控制台程序中创建图形。

现在你应该使用 UTF-8。

这是一个使用来自Box Drawing Unicode 块的字符的示例:

puts "╔═══════╗\n║ Hello ║\n╚═══════╝"

输出:

╔═══════╗
║ Hello ║
╚═══════╝

因此,例如,如果我要使用 Unicode 字符 U+2588(完整块),我将如何在 Ruby 中将其打印到控制台。

你可以使用:

puts "\u2588"

或:

puts 0x2588.chr('UTF-8')

或者简单地说:

puts '█'

【讨论】:

  • 谢谢。这正是我一直在寻找的。我对控制台应用程序的大部分编程经验都是针对 DOS 6.0 的,而 ASCII 仍然是王道。在 Windows 中编程我从来不用担心它。
【解决方案2】:

您可能需要指定编码,例如:

219.chr(Encoding::UTF_8)

【讨论】:

  • 您也可以传递一个编码名称,例如219.chr('UTF-8')
  • Extended_ASCII 的编码是什么,因为 UTF-8 没有 ASCII 的实心块和边框等字符。
  • "Extended ASCII" 不是编码,因此很难准确说出您的文本使用的是什么(请参阅en.wikipedia.org/wiki/Extended_ASCII
【解决方案3】:

您需要指定字符串的编码,然后将其转换为UTF-8。例如如果我想使用Windows-1251 编码:

219.chr.force_encoding('windows-1251').encode('utf-8')
# => "Ы"

同样适用于ISO_8859_1

219.chr.force_encoding("iso-8859-1").encode('utf-8')
# => "Û" 

【讨论】:

    【解决方案4】:

    可以使用Integer#chr([encoding])的方法:

    219.chr(Encoding::UTF_8)   #=> "Û"
    

    method doc 中的更多信息。

    【讨论】:

      猜你喜欢
      • 2022-01-14
      • 1970-01-01
      • 2011-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-14
      • 2021-10-18
      相关资源
      最近更新 更多