读取时出现 Ruby CSV UTF8 编码错误

2024-03-13

这就是我正在做的:

csv = CSV.open(file_name, "r")

我用它来测试:

line = csv.shift
while not line.nil?
  puts line
  line = csv.shift
end

我遇到了这个:

ArgumentError: invalid byte sequence in UTF-8

我读了在这里回答 https://stackoverflow.com/a/4697471/724516这就是我尝试过的

csv = CSV.open(file_name, "r", encoding: "windows-1251:utf-8")

我遇到了以下错误:

Encoding::UndefinedConversionError: "\x98" to UTF-8 in conversion from Windows-1251 to UTF-8

然后我遇到了一个 Ruby 宝石 - charlock_holmes。我想我会尝试使用它来查找源编码。

CharlockHolmes::EncodingDetector.detect(File.read(file_name))
=> {:type=>:text, :encoding=>"windows-1252", :confidence=>37, :language=>"fr"}

所以我这样做了:

csv = CSV.open(file_name, "r", encoding: "windows-1252:utf-8")

仍然得到这个:

Encoding::UndefinedConversionError: "\x8F" to UTF-8 in conversion from Windows-1252 to UTF-8

您似乎在检测文件的有效编码时遇到问题。查洛克·福尔摩斯为您提供有用的提示:confidence=>37这仅仅意味着检测到的编码可能不正确。

根据错误消息和test_transcode.rb from https://github.com/MacRuby/MacRuby/blob/master/test-mri/test/ruby/test_transcode.rb https://github.com/MacRuby/MacRuby/blob/master/test-mri/test/ruby/test_transcode.rb我找到了通过您的两条错误消息的编码。在...的帮助下String#encode很容易测试:

"\x8F\x98".encode("UTF-8","cp1256") # => "ڈک"

您的问题看起来与文件严格相关,而不是与 ruby​​ 相关。

如果我们不确定要使用哪种编码并且同意放弃一些我们可以使用的字符:invalid and :undef参数为String#encode, 在这种情况下:

"\x8F\x98".encode("UTF-8", "CP1250",:invalid => :replace, :undef => :replace, :replace => "?") # => "Ź?"

另一种方法是使用Iconv *//IGNORE目标编码选项:

Iconv.iconv("UTF-8//IGNORE","CP1250", "\x8F\x98")

作为源编码建议查洛克·福尔摩斯应该还不错。

PS. String.encode在 ruby​​ 1.9 中引入。使用 ruby​​ 1.8 你可以使用Iconv

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

读取时出现 Ruby CSV UTF8 编码错误 的相关文章

随机推荐

  • 如何在 Javascript 中测试相同的对象实例?

    假设我在 Javascript 中有以下对象 var a xxx 33 var b xxx 33 var c c a 可以告诉我是否正在处理同一个对象实例的 Javascript 测试是什么 换句话说 对于 a 和 b b 和 c 它应该返
  • iPhone上是否需要在代码中手动设置核心数据对象的逆关系

    我是核心数据的新手 所以如果我弄错了一些术语 请原谅 我的 xcdatamodel 文件中有几个对象 它们都是相互关联 相互关联的 如果我使用以下代码连接其中两个对象 则不会设置逆关系 managedObj1 setValue manage
  • 使用Java Reflection,你能检测一个方法是否是Native的吗?

    使用 Java Reflection 您可以检测所有方法及其返回类型 但是有没有办法检测一个方法是否被声明为native or not 是的 你可以 方法getModifiers 返回一个应用了正确掩码的 int 可以告诉您该方法是否是本机
  • 具有协调器布局的 ViewPager 片段中的 Android 设计支持库 FAB

    我正在尝试从 ViewPager 内的 Fragment 内的 Android 设计支持库获取浮动操作按钮 我有 4 个选项卡 我希望 FAB 仅位于其中一个选项卡中 我的布局如下 main layout xml
  • new ParseObject("Message") 使应用程序崩溃

    我正在尝试创建一个新的 ParseObject 如下所示 ParseObject message new ParseObject Message 当我运行该应用程序时 出现以下错误 java lang IllegalArgumentExce
  • 如何存储Android应用内计费的订阅数据?

    我正在尝试实施应用内计费 我的应用程序唯一销售的是每月订阅 我已经复制了 Android 提供的 地下城 示例 并且它可以工作 但对于我必须出售的一件东西来说 它似乎过于复杂 而且我知道无论如何我都不应该复制它 Dungeons 示例有一个
  • 响应标头太大 - Jetty 嵌入式版本 9

    使用 Jetty 时 出现 响应标头太大 的异常 该异常仅在客户端的大小达到时才会抛出jsonValue很大 大于 1500 字节 如果jsonvalue较小 一切正常 这是我的代码 非常简单 服务器代码 Server server new
  • 在 Web.Config 中添加 HtmlHelper NameSpace 不起作用

    问题一 我已经开始学习ASP NET MVC 我做了一个简单的扩展方法 如下所示 namespace MvcTestz Project is also named as MvcTestz public static class Submit
  • 删除视频缩略图上的黑条

    我有一个画廊 用户可以在其中提交视频的 Youtube 链接 服务器会自动从 Youtube 获取缩略图 然而 许多视频的图像顶部和底部都包含黑条 我知道黑条的起源 但当我将缩略图大小调整为正方形时 黑条会干扰设计 我尝试从上到下分析像素颜
  • 缺少 mcrypt 扩展名。请检查您的 PHP 配置

    我刚刚按照位于的教程进行操作https www digitalocean com community articles how to install linux apache mysql php lamp stack on ubuntu h
  • 完全隐藏 Chart.js 中的空条

    In my Chart js 条形图 每个标签大约有 6 个数据集 其中一些数据集的值为 0 这会导致 x 轴上出现空白 请参阅 我想删除这些空白 我该怎么做 从数据库呈现我的代码后 它看起来像这样 请注意 为了简单起见 我大大减少了代码
  • 如何将系统分解为模块?

    模块化 的有效性取决于将系统划分为模块所使用的标准 我想要的是 提出一些可用于将系统分解为模块的标准 Cohesion http en wikipedia org wiki Cohesion computer science 模块中的功能是
  • 如何在 Dragover/dragenter HTML 5 拖放过程中更改图标

    如何在 Dragover 或 Dragenter 过程中更改 DnD 拖放 图标 有可能吗 如果拖放源位于 html 页面内部 例如将一个 div 拖到另一个 div 中 我可以在拖拽启动期间更改图标 这是我的代码 我正在使用角度 我已经设
  • 在 if 语句中展开多个选项

    我想在一个 if 语句中解开两个选项 但编译器抱怨密码常量运算符后的预期表达式 可能是什么原因 if let email self emailField text let password self passwordField text d
  • 如何强制 Google Charts vAxes 渲染?

    目前 我在页面上渲染两个图表 我正在使用谷歌的可视化图表库 由于页面大小问题 vAxes 在某些 大部分时间拒绝渲染 如果我给它足够的空间 它就会很好地渲染轴 但如果它稍微偏离 即使有足够的空间容纳这些该死的轴 它们也会拒绝渲染 我不能这样
  • Windows Phone IE 移动 bug 具有透明背景图像和底部绝对定位

    我在使用 WP IE 时遇到两个问题 透明背景图像的透明边框上有伪影 绝对定位的 div 到页面底部在浏览器导航栏和页面底部之间留下约 5px 的白色间隙 请注意 我使用 div 而不是 img 来处理CSS 视网膜图像替换 http co
  • 透明状态栏不适用于 windowTranslucentNavigation="false"

    我正在开发一个Activity我需要在运行 5 0 API 21 的设备上使导航栏不透明 并使状态栏透明 下面是我使用的样式 以及对我的问题的解释 AppTheme延伸Theme AppCompat Light NoActionBar
  • 从非托管 C 调用托管代码

    因此 经过大约一天半的时间 我的进展为零 我需要用 C 语言编写一个 DLL 用作现有应用程序的插件 DLL 必须由 Visual Studio 2008 编译器使用以下选项进行编译 cl DNT40 DPOMDLL DCRTAPI1 cd
  • MySQL 多 ID 查找

    我正在尝试向系统添加全文搜索 我想要编写的查询需要涉及多次查找 然后进行搜索 如果可能的话 我有一张教师表和一张科目表 teacherProfile teacherId int primary key subjectOneId int su
  • 读取时出现 Ruby CSV UTF8 编码错误

    这就是我正在做的 csv CSV open file name r 我用它来测试 line csv shift while not line nil puts line line csv shift end 我遇到了这个 ArgumentE