我正在使用(并坚持使用)以下版本的 Ruby:
ruby 1.8.7 (2012-06-29 patchlevel 370) [x86_64-linux]
我尝试了很多谷歌搜索,但我找不到我的问题的有效答案。我正在导入一个 CSV 文件,该文件通常来自用户的 Microsoft Excel 电子表格。我对 CSV 部分没有任何问题,但我不知道如何处理 MS“智能”引号。我的测试输入文件是 DOS 格式并包含以下行:
珍妮奥尼尔
O'Neill 的 O 和 N 之间有一个 MS 撇号,在我的文本编辑器中显示为“问号菱形”。当我尝试以下代码时,撇号会被删除:
# replace Microsoft Office 'smart' quotes
# gem to detect character encoding
require 'rchardet'
if name != nil
cd = CharDet.detect(name)
encoding = cd['encoding']
name = Iconv.conv('UTF-8//TRANSLIT', encoding, name)
end
这会产生不希望的输出:
珍妮奥尼尔
有没有办法在 Ruby 1.8.7 中编写一个正则表达式来检测卷曲的 MS 字符并用直的字符替换它们?我试过在我的正则表达式中使用十六进制代码,但我不能让它们工作。我知道 Ruby 1.8.7 在处理 1.9 的字符编码方面受到更多限制,但我坚持使用它。目前无法在此项目中升级 Ruby。
任何帮助,将不胜感激。谢谢你。
在阅读了 TinMan 建议的帖子后,我尝试使用 gsub 替换生成的 '�' 子字符串:
if name != nil
name = Iconv.conv("UTF-8", "cp1252//TRANSLIT", name)
name.gsub(/\u00ef\u00bf\u00bd/u, "'")
end
唉,没有爱。它仍然产生相同的结果:(