我想把“hello”转换成“hello”,删除所有在插入数据库时引起问题的特殊字符。它们似乎不是utf8的一部分。
我在想办法,但我有点困在这里了:
str = "A string with " to "A string with "
some_format = "I have no clue what format this is"
Iconv.conv(some_format, 'UTF-8//IGNORE', str)
这样做:
Iconv.conv('UTF-16', 'UTF-8//IGNORE', str)
…回报…
\376\377\000H\000E\000L\000L\000O?G?`?`?`?`?`?`?`?`?`?`?`?`?`?`?`?`?`?`?`?`?`?`?`?`?`?`?????\342
我不想转换成utf8以外的东西,因为我必须处理阿拉伯字符,中文,日语,韩语…
如有任何帮助/建议,将不胜感激。我正在使用Ruby1.8.7,但我很快就会迁移到1.9.3。在这两种情况下都有效的解决方案是最好的,但仅适用于1.9.3的解决方案也很好。
最佳答案
下面是一种删除特定编码中不存在的字符的方法(当将字符串转换为另一种编码时)
# -*- coding: utf-8 -*-
a = "⚒og"
p a => ⚒og
p a.encode('iso-8859-1', :undef => :replace, :replace => '') => og
但是你的问题可能不同。因为这些有问题的字符不太可能不是utf-8的一部分。
可能的问题:
可能只是你使用的字体不知道如何显示这些字符。很少有字体有完整的utf-8字符覆盖。
我不知道你是如何显示这些字符串的,但要确保你使用的字体具有良好的字符覆盖率。比如像德哈武,http://dejavu-fonts.org/wiki/Main_Page
您确定您的数据库已正确配置为使用utf-8吗?
还要小心,因为您的字符串可能非常好,但由于不完全的utf-8支持(以前发生在我身上),它不会显示在终端或数据库应用程序中。因此,有时当调试显示被窃听时,调试会变得很棘手…(这有意义吗?)