我似乎是一个非常简单和非常需要的方法.我需要从字符串中删除所有非ASCII字符.例如©等.请参阅以下示例.
#coding: utf-8
s = " Hello this a mixed string © that I made."
puts s.encoding
puts s.encode
Run Code Online (Sandbox Code Playgroud)
输出:
UTF-8
Hello this a mixed str
Run Code Online (Sandbox Code Playgroud)
我做的.
当我将其提供给Watir时,会产生以下错误:不兼容的字符编码:UTF-8和ASCII-8BIT
所以我的问题是我想在使用它之前去除所有非ASCII字符.我不知道源字符串"s"使用哪种编码.
我一直在搜索和试验很长一段时间.
如果我尝试使用
puts s.encode('ASCII-8BIT')
Run Code Online (Sandbox Code Playgroud)
它给出了错误:
: "\xC2\xA9" from UTF-8 to ASCII-8BIT (Encoding::UndefinedConversionError)
Run Code Online (Sandbox Code Playgroud)
Jör*_*tag 37
你可以直接翻译你要求的内容Regexp.你写了:
我想摆脱所有非ASCII字符
我们可以稍微改写一下:
我想替换所有
ASCII没有任何东西的属性
这是一个可以直接表达的声明Regexp:
s.gsub!(/\P{ASCII}/, '')
Run Code Online (Sandbox Code Playgroud)
作为替代方案,您还可以使用String#delete!:
s.delete!("^\u{0000}-\u{007F}")
Run Code Online (Sandbox Code Playgroud)
UTF-8 是一种可变长度编码。当一个字符占据一个字节时,其值与 7 位 ASCII 一致。那么为什么不直接查找 MSB 中带有“1”的字节,然后删除它们及其尾部呢?以“110”开头的字节后面将跟着一个附加字节。以“1110”开头的字节后面将跟随两个。以“11110”开头的字节后面将跟随三个,这是 UTF-8 支持的最大字节数。
这一切都在我的脑海里。我可能是错的。
| 归档时间: |
|
| 查看次数: |
10398 次 |
| 最近记录: |