我想将“HELLO”转换为“HELLO”,删除所有在插入数据库时导致问题的特殊字符。它们似乎不是UTF8的一部分。
我正在试图找出Iconv,但我有点被困在这里:
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以外的东西,因为我必须处理阿拉伯字符,中文,日文,韩文......
任何帮助/指针将不胜感激。我正在使用Ruby 1.8.7,但我很快就会迁移到1.9.3。在这两种情况下都可以使用的解决方案是最好的,但只有1.9.3的解决方案也可以。
答案 0 :(得分:4)
这是一种删除特定编码中不存在的字符的方法(将字符串转换为其他编码时)
# -*- coding: utf-8 -*-
a = "⚒og"
p a => ⚒og
p a.encode('iso-8859-1', :undef => :replace, :replace => '') => og
但是你的问题可能会有所不同。因为这些有问题的角色不太可能不是utf-8的一部分。 可能的问题:
可能只是您使用的字体不知道如何显示这些字符。很少有字体具有完整的utf-8字符覆盖率。 我不知道你是如何尝试显示这些字符串但确保使用具有良好字符覆盖率的字体。例如DejaVu,http://dejavu-fonts.org/wiki/Main_Page
您确定您的数据库已正确配置为使用utf-8吗?
另外要小心,因为你的字符串可能完全正常,但由于utf-8支持不完整(以前发生在我身上),因此终端或数据库应用程序中没有显示。因此,当你的调试显示被窃听时,有时调试会变得棘手......(这有意义吗?)