【问题标题】:How to convert a formatted string into plain text如何将格式化的字符串转换为纯文本
【发布时间】:2021-09-25 03:33:06
【问题描述】:

用户复制粘贴并发送以下格式的数据:“???????????????????????????????????????? ???” 我需要将其转换为纯 txt(我们可以说 ascii 字符),例如“jovy debbie” 它有不同的字体和格式: 前任: '???????????????????????? ????????????????????? '????????????????????????????????? ???????????????????????? ????????????????????????'

任何帮助将不胜感激,我已经参考了其他堆栈溢出问题但没有运气:(

【问题讨论】:

  • 到目前为止您尝试过什么?能否提供一些代码示例?
  • 所以.... 只是为了稍微清理一下您的术语,"???????????????? ????????????????????????" IS 是一个纯字符串,它是 NOT 一种字体。您是正确的,这些不是 ASCII 字符,但您使用的其他术语是错误的。
  • US-ASCII 是UTF-8 characters 的子集。您收到的只是非 ASCII 字符,您显然希望将其映射为 ASCII 字符。但是请注意,一般而言,这不是一个定义非常明确的问题,因为有些字符的映射不明确,甚至根本没有逻辑映射,例如Ώ, Ԫ, ֎, ؠ, .....
  • 甚至 表情符号 ????是有效的(可能是)UTF-8 字符的组合!!
  • 感谢您纠正我@TomLord。您对如何将其转换为一种通用格式有任何意见吗?然后再根据需要根据常用格式转换成。

标签: ruby-on-rails ruby string


【解决方案1】:

这些字母来自Mathematical Alphanumeric Symbols 块。

由于它们与 ASCII 对应物有固定的偏移量,您可以使用 tr 来映射它们,例如:

"???? ??????".tr("?-?", "a-z")
#=> "jovy debbie"

同样的方法可以用于其他样式,例如

"?????? ?????".tr("?-??-?", "a-zA-Z")
#=> "Jenica Dugos"

这使您可以完全控制字符映射。

或者,您可以尝试Unicode normalization。 NFKC / NFKD 表单应该删除大多数格式,并且似乎适用于您的示例:

"???? ??????".unicode_normalize(:nfkc)
#=> "jovy debbie"

"?????? ?????".unicode_normalize(:nfkc)
#=> "Jenica Dugos"

【讨论】:

  • 如果字符串采用另一种格式,它不会丢失:'???????????''????????????????????' span>
  • 我想更大的问题是:为什么您的用户发送晦涩的 unicode 字符,如果您现在担心将所有输入映射回 ASCII,那么您为什么要接受它作为有效输入?跨度>
  • @TomLord 我正在研究一个遗留系统,它在数据库中包含此类数据,所以我需要更正它。
猜你喜欢
  • 1970-01-01
  • 2019-08-26
  • 2012-09-05
  • 1970-01-01
  • 2019-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多