我正在处理一些HTML,它有一些奇怪的字符(当我使用print命令时给出一个行提要),所以我做了以下工作:
d.each_char do |c|; puts c + " " + c.ord.to_s; end我发现它是一个有9644码的角色。看起来这是Unicode黑色矩形。还有一个类似的ASCII 219,所以我想把它映射到这个ASCII代码。我试过:
d = d.gsub( 9644.chr, 219.chr) 这给了我一个错误“RangeError: 9644超出了char范围”。
我有没有办法做到这一点(即将所有命令9644改为ord.219 )。
或者,我是否可以将ASCII 255上的所有字符更改为“?”,即使我可以,也可以知道如何做到这一点。
你好,本
发布于 2017-08-14 23:02:52
不如:
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用219替换9644的每次出现,并保留其他整数。最后,我们用map(&:chr)将整数映射回单个字符,然后将得到的字符数组重新组合成一个字符串。
请注意,这段代码沿途创建了几个数组,每个数组的大小与原始字符串的长度相等,因此在非常大的字符串上使用它可能会占用相当大的内存。如果是这样的话,您可以考虑用map代替map!来修改数组。
https://stackoverflow.com/questions/45684140
复制相似问题