【发布时间】:2015-05-05 08:35:48
【问题描述】:
我有一个 Rails 2.2.2 和 Ruby 1.8.6 应用程序,它刚刚遇到了一个奇怪的错误。有一个提交表单的页面,其中一个表单输入值通过参数作为"L\001A\001K\0012\0013\0010\0017" 传递。
事实证明,该值是从 PDF 复制到文本字段中的 - 在 pdf 中,它看起来像“LAK2307”,但是当它被复制到输入中时,"\001" 会插入到每个字符之间。 "\001" 看起来像 "null char" 的 utf-8 编码,它是 unicode 值 1。
我无法阻止人们将其复制到输入中并提交,但我想在保存到我们的数据库之前对其进行清理。我们已经在保存之前将一些字段转换为 ASCII 字符,方法是在它们上运行以下代码:
newval = Iconv.iconv('ascii//ignore//translit', 'utf-8', oldval).first
假设这是处理此问题的最佳方法,我该如何做类似的事情将 utf8 字符转换为常规字符?在这种情况下,我想我只想将"\001" 转换为"",从而将"L\001A\001K\0012\0013\0010\0017" 转换为"LAK2307"。
谢谢,马克斯
编辑 - 更改了问题的名称以更好地描述问题
EDIT2 - 我认为由于问题字符串是普通字符和 utf-8 编码字符的混合,我需要做这样的事情:
newstring = ""
oldstring.split("").each do |char|
#test if char is a utf8 string encoded like "\001" (or "\153" etc)
if char.is_utf8? #made up method
newstring << char.unencoded #made up method
else
newstring << char
end
end
有几个伪代码元素 - 方法“is_utf8?”和“未编码” - 任何人都可以填写这些空白吗?
【问题讨论】:
-
this lib 一定会帮助你。我正在安装 1.8.6 :)
-
您能显示您的字符串的代码点、字符或字节吗?
-
@MaxWilliams 方法 API 告诉它可以做到。所以认为它会有所帮助。
-
@Stefan 这就是我所做的
arr = [];s.each_byte{|b| arr << b};arr=>[76, 1, 65, 1, 75, 1, 50, 1, 51, 1, 48, 1, 55]
标签: ruby-on-rails ruby unicode encoding utf-8