更改已抓取的奇数(非常高)ASCII 字符 HTML
Changing odd (very high) ASCII chars in scraped HTML
我正在处理一些 HTML 并且它有一些奇怪的字符(当我使用打印命令时会换行)所以我做了以下操作:
d.each_char do |c|; puts c + " " + c.ord.to_s; end
我发现是个9644的字符,好像是Unicode黑色矩形。还有一个 ASCII 219 看起来很相似,所以我想将它映射到这个 ASCII 码。我试过了:
d = d.gsub( 9644.chr, 219.chr)
这给了我一个错误 "Exception: RangeError: 9644 out of char range"。
有什么方法可以做到这一点(即将所有 ord.9644 更改为 ord.219。
或者,我是否可以将 ASCII 255 上的所有字符更改为“?”,即使我可以,最好知道如何执行此操作。
此致,
本
怎么样:
d.chars.map(&:ord).map { |int| int == 9644 ? 219 : int }.map(&:chr).join
如果您只想用 ?
替换所有高值,请改用:
high_limit = 999 # Use whatever integer your `#chr` method can handle
d.chars.map(&:ord).map { |int| int > high_limit ? 255 : int }.map(&:chr).join
#chars
方法将字符串分解为单个字符数组,然后 map(&:ord)
将其转换为表示 UTF-8 代码的整数数组。带有条件块的 map
将每次出现的 9644 替换为 219,并保持其他整数不变。最后,我们使用 map(&:chr)
将整数映射回单个字符,然后将生成的字符数组连接回字符串。
请注意,此代码沿途创建了几个数组,每个数组的大小都等于原始字符串的长度,因此在非常大的字符串上使用它可能会消耗大量内存。如果是这种情况,您可以考虑将 map
替换为 map!
以就地修改数组。
我正在处理一些 HTML 并且它有一些奇怪的字符(当我使用打印命令时会换行)所以我做了以下操作:
d.each_char do |c|; puts c + " " + c.ord.to_s; end
我发现是个9644的字符,好像是Unicode黑色矩形。还有一个 ASCII 219 看起来很相似,所以我想将它映射到这个 ASCII 码。我试过了:
d = d.gsub( 9644.chr, 219.chr)
这给了我一个错误 "Exception: RangeError: 9644 out of char range"。
有什么方法可以做到这一点(即将所有 ord.9644 更改为 ord.219。
或者,我是否可以将 ASCII 255 上的所有字符更改为“?”,即使我可以,最好知道如何执行此操作。
此致, 本
怎么样:
d.chars.map(&:ord).map { |int| int == 9644 ? 219 : int }.map(&:chr).join
如果您只想用 ?
替换所有高值,请改用:
high_limit = 999 # Use whatever integer your `#chr` method can handle
d.chars.map(&:ord).map { |int| int > high_limit ? 255 : int }.map(&:chr).join
#chars
方法将字符串分解为单个字符数组,然后 map(&:ord)
将其转换为表示 UTF-8 代码的整数数组。带有条件块的 map
将每次出现的 9644 替换为 219,并保持其他整数不变。最后,我们使用 map(&:chr)
将整数映射回单个字符,然后将生成的字符数组连接回字符串。
请注意,此代码沿途创建了几个数组,每个数组的大小都等于原始字符串的长度,因此在非常大的字符串上使用它可能会消耗大量内存。如果是这种情况,您可以考虑将 map
替换为 map!
以就地修改数组。