Loading [MathJax]/jax/output/CommonHTML/config.js
社区首页 >问答首页 >`CSV.read`错误UTF-8 (ArgumentError)中的无效字节序列

`CSV.read`错误UTF-8 (ArgumentError)中的无效字节序列
EN

Stack Overflow用户
提问于 2016-09-15 03:01:10
回答 1查看 2K关注 0票数 1

首先,这不是这个SO question的副本,这里.I有一个用Shift-JIS编码的csv文件,这是我的解析文件的脚本。

代码语言:javascript
代码运行次数:0
复制
require 'csv'
str1 = '社員番号'
str2 = 'メールアドレス'
str1.force_encoding("Shift_JIS").encode!
str2.force_encoding("Shift_JIS").encode!
file=File.open("SyainInfo.csv", "r:Shift_JIS")
csv = CSV.read(file, headers: true)
p csv[str1]
p csv [str2]

但是,即使在指定enconding之后,我也得到了invalid byte sequence in UTF-8 (ArgumentError)。有什么想法吗?我的红宝石是2.3.0

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-15 03:31:07

首先,您的编码看起来不太正确:

代码语言:javascript
代码运行次数:0
复制
'社員番号'.force_encoding("Shift_JIS").encode!
#=> "\x{E7A4}\xBE\x{E593}\xA1\x{E795}\xAA\x{E58F}\xB7"

force_encodingstr1获取字节并将它们解释为Shift JIS,而您可能希望将字符串转换为Shift JIS:

代码语言:javascript
代码运行次数:0
复制
'社員番号'.encode('Shift_JIS')
#=> "\x{8ED0}\x{88F5}\x{94D4}\x{8D86}"

接下来,您可以将一个文件名传递给CSV.read,而不是:

代码语言:javascript
代码运行次数:0
复制
file = File.open(filename)
CSV.read(file)

你只需写:

代码语言:javascript
代码运行次数:0
复制
CSV.read(filename)

也就是说,您可以使用Shift JIS编码的字符串:

代码语言:javascript
代码运行次数:0
复制
require 'csv'
str1 = '社員番号'.encode("Shift_JIS")
str2 = 'メールアドレス'.encode("Shift_JIS")
csv = CSV.read('SyainInfo.csv', encoding: 'Shift_JIS', headers: true)
csv[str1]
csv[str2]

或者--这就是我要做的--您可以通过指定第二个编码来处理UTF-8字符串:

代码语言:javascript
代码运行次数:0
复制
require 'csv'
str1 = '社員番号'
str2 = 'メールアドレス'
csv = CSV.read('SyainInfo.csv', encoding: 'Shift_JIS:UTF-8', headers: true)
csv[str1]
csv[str2]

encoding: 'Shift_JIS:UTF-8'指示CSV读取Shift JIS数据并将其转换为UTF-8.它相当于将'r:Shift_JIS:UTF-8'传递给File.open

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39509417

复制
相关文章
java中 xml 问题 :1 字节的 UTF-8 序列的字节 1 无效。
根本原因是: The cause of this is a file that is not UTF-8 is being parsed as UTF-8. It is likely that the parser is encountering a byte value in the range FE-FF. These values are invalid in the UTF-8 encoding. 就是说字符编码在UTF-8中有特殊含义,或者是没用正确转换过来。 解决方案: 第一,可以直接在XML文
小小明童鞋
2018/06/13
2.5K0
3字节的UTF-8序列的字节 3 无效
Cause: com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: 3 字节的 UTF-8 序列的字
WindCoder
2018/09/20
3.1K0
3字节的UTF-8序列的字节 3 无效
2字节的UTF-8序列的字节2无效 解决方案
二、将xml文件顶部的encoding=UTF-8改为encoding=UTF8可以解决问题
张小驰出没
2021/04/15
2.5K0
【踩坑实录】mybatis项目报错:“Caused by: .....Exception: 1 字节的 UTF-8 序列的字节 1 无效”
而由于项目本身的默认编码是GBK,因此xml文件保存时的编码是GBK,声明的xml文档编码与实际编码不一致,就出现了问题
知识分子没文化
2023/07/01
3130
【踩坑实录】mybatis项目报错:“Caused by: .....Exception: 1 字节的 UTF-8 序列的字节 1 无效”
Python中的文本和字节序列
原因在于这个latin1不会对中午编码,所以我们需要处理这个EncodeError,处理如下:
py3study
2020/01/03
2K0
RabbitMQ启动配置中出现(ArgumentError) argument error xxx的错误
^0/1-0-"/1 src/rabbit_misc.erl:668: :rabbit_misc.format_many/1 (rabbitmqctl) lib/rabbitmqctl.ex:349: RabbitMQCtl.get_node_diagnostics/1 (rabbitmqctl) lib/rabbitmqctl.ex:307: RabbitMQCtl.format_error/3 (rabbitmqctl) lib/rabbitmqctl.ex:43: RabbitMQCtl.main/1 (elixir) lib/kernel/cli.ex:105: anonymous fn/3 in Kernel.CLI.exec_fun/2
归思君
2023/10/16
5720
RabbitMQ启动配置中出现(ArgumentError) argument error xxx的错误
java 中 16 进制 HEX 转换成字节码形式的 UTF-8
恩,又碰到个蛋疼的编码转换问题了:要把形如 \xE9\xBB 的字符串转成中文。。。 在python中我们直接 print "\xE9\xBB\x84" 即可, 在shell中我们直接 echo $'\xe9\xbb\x84' #echo -e '\xe9\xbb\x84'也行, 注意:不能直接 echo $'\xde\xab'|iconv -f gbk -t utf-8 , 因为 gbk的话,\xE9\xBB是榛,后面的\x84只有半个字,会报错或乱码, utf8是变长的,占1~4字
用户1177713
2018/02/24
3.2K0
Mybatis 批量更新无效字符的错误
使用<foreach></foreach> 批量insert时报错 ORA-00911: 无效字符的错误
三哥
2018/12/24
1.9K0
UTF-8编码占几个字节?
占2个字节的:带有附加符号的拉丁文、希腊文、西里尔字母、亚美尼亚语、希伯来文、阿拉伯文、叙利亚文及它拿字母则需要二个字节编码
全栈程序员站长
2022/09/13
2.2K0
字节序列操作函数
字符串是以\0(即NUL)结尾的一串字符指针。所以一个字符串内部不可能包括任何NUL字符,但是,非字符串数据内部包含NUL的并不罕见。我们不能用字符串函数(如strcat/strcpy等)来处理这些数据,因为他们碰到NUL就会停止工作。
phith0n
2020/10/15
6030
Excel中的无效链接(1)
我们可以断定是C4和G4这两个单元格使用了“河北省”,修改他们的值即可消除无效链接的错误。
东风压倒西风
2022/04/17
2.5K0
python 文本和字节序列
sample = '1\xbc\xb2\u0969\u136b\u216b\u2466\u2480\u3285'
用户5760343
2019/07/31
7320
【错误记录】IntelliJ IDEA 中编译运行报错 ( 当前设置 GBK 编码 | 错误: 编码UTF-8的不可映射字�? )
文章目录 一、 报错信息 二、 解决方案 一、 报错信息 ---- 当前的 IntelliJ IDEA 设置的编码为 GBK 编码 , 选择 " 菜单栏 / File / Settings " 选项 , 在 " File Encodings " 中 , 查看 工程的编码 , 运行时报错 : 在中文注释的位置 , 编码报错 ; D:\002_Project\003_Java_Work\Exsample\src\main\java\ArrowCanvas.java:17: 错误: 编码UTF-8的不可映
韩曙亮
2023/04/01
5.2K0
【错误记录】IntelliJ IDEA 中编译运行报错 ( 当前设置 GBK 编码 | 错误: 编码UTF-8的不可映射字�? )
python 字符串(字符序列)和字节序列
字符序列(string) -> 字节序列(bytes) -------------编码(encode)
友儿
2022/09/26
6210
IDEA报错 java: 错误: 无效的源发行版:17
报错如下图所示 这就是没设置好JDK版本,按照下图设置好即可。 好的,齐活儿。
程序员十三
2022/11/28
4.4K0
IDEA报错 java: 错误: 无效的源发行版:17
microPython中的字节技术
导入模块时,MicroPython将代码编译为字节码,然后由MicroPython虚拟机(VM)执行字节码。字节码存储在RAM中。编译器本身需要RAM,但其在编译完成后才可用。
云深无际
2022/02/09
1.5K0
microPython中的字节技术
fastjson全局日期序列化设置导致JSONField无效
fastjson通过代码指定全局序列化返回时间格式,导致使用JSONField注解标注属性的特殊日期返回格式失效
code2roc
2023/07/19
5000
svn错误:Can't convert string from 'UTF-8' to native encoding
svn: Can't convert string from 'UTF-8' to native encoding:
一见
2018/08/02
1.2K0
ElementUI中的日历组件加载无效的问题
  在ElementUI中提供了一个日历组件。在某些场景下还是比较有用的。只是在使用的时候会有些下坑,大家要注意下。
用户4919348
2023/08/24
3940
ElementUI中的日历组件加载无效的问题
点击加载更多

相似问题

UTF-8中的ArgumentError无效字节序列

1116

“UTF-8 (ArgumentError)中的无效字节序列”

10

UTF-8 (ArgumentError)中的字节序列无效

10

ArgumentError: UTF-8中的字节序列无效

30

UTF-8中Rails无效字节序列(ArgumentError)

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文