gpt4 book ai didi

ruby - 如何在 Ruby 1.8.7 中将 Microsoft Office "Smart"或 "Curly"引号/撇号转换为 ASCII 或 UTF-8 "Straight"引号/撇号?

转载 作者:太空宇宙 更新时间:2023-11-03 16:59:23 31 4
gpt4 key购买 nike

我正在使用(并坚持使用)以下版本的 Ruby:

ruby 1.8.7 (2012-06-29 patchlevel 370) [x86_64-linux]

我尝试了很多谷歌搜索,但找不到解决我的问题的有效答案。我正在导入一个 CSV 文件,该文件通常来自用户的 Microsoft Excel 电子表格。我在处理 CSV 部分时没有遇到任何问题,但我不知道如何处理 MS“智能”引号。我的测试输入文件是 DOS 格式并包含这一行:

珍妮·奥尼尔

O'Neill 的 O 和 N 之间有一个 MS curl 撇号,在我的文本编辑器中显示为“问号菱形”。当我尝试以下代码时, curl 的撇号被删除:

# 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 中编写一个正则表达式来检测 curl 的 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

唉,没有爱。它仍然产生相同的结果:(

最佳答案

我是用 PHP 做的,效果很好。也许您可以试试 Ruby 等价物(如果存在)?

$text = str_replace('�', '"', $text);

为了解决 MySQL 的撇号和转义问题,我必须将我的代码更新为...

$bad_symbols = array('�t', '�s', '�ll', '�ve', '�d', '�re', '� ', ' �');
$replacements_for_bad_symbols = array("\'t", "\'s", "\'ll", "\'ve", "\'d", "\'re", '" ', ' "');
$text = str_replace($bad_symbols, $replacements_for_bad_symbols, $text);

关于ruby - 如何在 Ruby 1.8.7 中将 Microsoft Office "Smart"或 "Curly"引号/撇号转换为 ASCII 或 UTF-8 "Straight"引号/撇号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14073186/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com