如何从Ruby中的字符串中删除所有非ASCII字符
我似乎是一个非常简单和非常需要的方法。 我需要从字符串中删除所有非ASCII字符。 例如©等。请参阅以下示例。
#coding: utf-8 s = " Hello this a mixed string © that I made." puts s.encoding puts s.encode
输出:
UTF-8 Hello this a mixed str
我做的。
当我将它提供给Watir时,会产生以下错误:不兼容的字符编码:UTF-8和ASCII-8BIT
所以我的问题是我想在使用它之前摆脱所有非ASCII字符。 我不知道源字符串“s”使用哪种编码。
我一直在搜索和试验很长一段时间。
如果我尝试使用
puts s.encode('ASCII-8BIT')
它给出了错误:
: "\xC2\xA9" from UTF-8 to ASCII-8BIT (Encoding::UndefinedConversionError)
您可以直接将您要求的内容翻译成Regexp
。 你写了:
我想摆脱所有非ASCII字符
我们可以稍微改写一下:
我想替换所有不具备
ASCII
属性的ASCII
这是一个可以在Regexp
直接表达的声明:
s.gsub!(/\P{ASCII}/, '')
作为替代方案,您也可以使用String#delete!
:
s.delete!("^\u{0000}-\u{007F}")
使用正则表达式删除字符。 这个例子在C#中,但正则表达式应该是相同的: 如何从字符串中删除非ASCII字符? (在C#中)
使用gsub将其翻译成ruby并不困难。
UTF-8是可变长度编码。 当一个字符占用一个字节时,其值与7位ASCII一致。 那你为什么不在MSB中查找带有’1’的字节,然后删除它们和它们的预告片? 以“110”开头的字节后面将跟着一个额外的字节。 以“1110”开头的字节后面跟着两个字节。 一个以’11110’开头的字节后面跟着三个,UTF-8支持的最大值。
这一切都在我的头顶。 我错了。
- Ruby Float#round方法表现不正确圆(2)
- OSX Mavericks之后无法加载此类文件 – 脚本/../config / boot(LoadError)
- 为什么使用String#count比使用Ruby中的String #chars更快地计数字母?
- 我可以操作yaml文件并再次写出来
- 有没有办法在Test :: Unit中撤消任何实例的Mocha存根
- 它是在’lib /’目录中实现自定义validation器的正确方法吗?
- Rails – ActionView :: Base.field_error_proc向上移动DOM树?
- Nokogiri以递归方式获得所有孩子
- 如何使用Gnuplot创建多页PDF文件?