Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/406.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Ruby中从字符串中删除所有非ASCII字符_Ruby_Watir - Fatal编程技术网

如何在Ruby中从字符串中删除所有非ASCII字符

如何在Ruby中从字符串中删除所有非ASCII字符,ruby,watir,Ruby,Watir,我似乎是一个非常简单和急需的方法。我需要从字符串中删除所有非ASCII字符。e、 g©等。参见以下示例 #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字符。e、 g©等。参见以下示例

#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)

UTF-8是一种可变长度编码。当字符占用一个字节时,其值与7位ASCII一致。那么,为什么不在MSB中查找带有“1”的字节,然后删除它们及其尾部呢?一个以“110”开头的字节后将再加一个字节。以“1110”开头的字节后面将跟两个。一个以“11110”开头的字节后面将跟三个,这是UTF-8支持的最大值


这些都是我脑子里想不出来的。我可能错了。

使用正则表达式去掉字符。这个例子是在C#中,但正则表达式应该是相同的:


使用gsub将其翻译成ruby应该不难。

您可以直接将您要求的内容翻译成
Regexp
。你写道:

我想去掉所有非ASCII字符

我们可以重新表述一下:

我想用零替换所有不具有
ASCII
属性的字符

这是一个可以直接用
Regexp
表示的语句:

s.gsub!(/\P{ASCII}/, '')
或者,您也可以使用
String#delete

s.delete!("^\u{0000}-\u{007F}")

1000倍{五颗星中有六颗星}——这救了我的培根·约格。感谢您通过代理教育我。对于我得到的
{ASCII}
方法
Encoding::CompatibilityError:不兼容的编码regexp匹配(UTF-8 regexp与ASCII-8BIT字符串)
关于ruby 1.9.3的ruby 1.9.3,您需要使用delete,而不是{ASCII}方法this
s.delete!(“^\u{0000}-\u{007F}”)
把我从痛苦中救了出来!!!非常感谢。