首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在刮过的HTML中更改奇数(很高) ASCII字符

在刮过的HTML中更改奇数(很高) ASCII字符
EN

Stack Overflow用户
提问于 2017-08-14 22:49:29
回答 1查看 45关注 0票数 0

我正在处理一些HTML,它有一些奇怪的字符(当我使用print命令时给出一个行提要),所以我做了以下工作:

代码语言:javascript
运行
复制
d.each_char do |c|; puts c + " " + c.ord.to_s; end

我发现它是一个有9644码的角色。看起来这是Unicode黑色矩形。还有一个类似的ASCII 219,所以我想把它映射到这个ASCII代码。我试过:

代码语言:javascript
运行
复制
d = d.gsub( 9644.chr, 219.chr) 

这给了我一个错误“RangeError: 9644超出了char范围”。

我有没有办法做到这一点(即将所有命令9644改为ord.219 )。

或者,我是否可以将ASCII 255上的所有字符更改为“?”,即使我可以,也可以知道如何做到这一点。

你好,本

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-14 23:02:52

不如:

代码语言:javascript
运行
复制
d.chars.map(&:ord).map { |int| int == 9644 ? 219 : int }.map(&:chr).join

如果您想简单地用?替换所有高值,那么请使用以下方法:

代码语言:javascript
运行
复制
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!来修改数组。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45684140

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档