将Ruby从任何编码转换为ASCII

8

我主要处理英文字母和所有标点符号,不必担心欧洲口音。所以我唯一关心的是当用户粘贴从网上复制的东西时,例如一个撇号,当我在控制台上执行puts时(在Win7上),它输出

"ItΓÇÖs" # 实际上应该是 " It's "

所以我的主要问题是,是否有一种终极转换方法可以在Ruby中使用,只需正确替换所有 ,.;?!"'~` _- 为ASCII对应字符?

我对编码知之甚少,如果您认为这是错误的问题,请指导我应该寻找什么。

谢谢

3个回答

6

我在出版业工作,经常需要处理此类问题。我们已经成功地使用了stringex https://github.com/rsl/stringex。他们有一个to_ascii方法,可以规范化unicode破折号等字符。


2

在 Ruby 2.0 中:

"ItΓÇÖs".encode("ASCII", invalid: :replace, undef: :replace, replace: '')
 => "Its" 

1

在编程中处理多字节编码时,iconv 是您的好朋友。而James Grey撰写了一系列 博客文章 ,介绍如何分解问题并转换编码。

当处理已粘贴文本时,问题会变得更加复杂,因为某些字符可能在一个多字节编码中,而其他字符可能在另一个编码中。您可能需要遍历字符串,检查多字节字符,然后询问Ruby编码是什么,如果不是预期的编码,将其转换为预期或所需的编码,然后移动到下一个字符。Grey的文章完整覆盖了所有内容,并且很值得阅读。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接