为了账号安全,请及时绑定邮箱和手机立即绑定

编码“ UTF8”的字节序列无效

编码“ UTF8”的字节序列无效

不负相思意 2019-12-16 10:28:35
我正在尝试将一些数据导入数据库。所以我创建了一个临时表,create temporary table tmp(pc varchar(10), lat decimal(18,12), lon decimal(18,12), city varchar(100), prov varchar(2));现在我正在尝试导入数据, copy tmp from '/home/mark/Desktop/Canada.csv' delimiter ',' csv但是后来我得到了错误,ERROR:  invalid byte sequence for encoding "UTF8": 0xc92c我该如何解决?我是否需要更改整个数据库的编码(如果需要,如何更改?)还是可以仅更改tmp表的编码?还是应该尝试更改文件的编码?编码“ UTF8”的字节序列无效
查看完整描述

4 回答

?
烙印99

TA贡献1829条经验 获得超13个赞

如果需要在数据库中存储UTF8数据,则需要一个接受UTF8的数据库。您可以在pgAdmin中检查数据库的编码。只需右键单击数据库,然后选择“属性”。


但是该错误似乎告诉您源文件中存在一些无效的UTF8数据。这意味着该copy实用程序已检测到或猜测您正在向其提供UTF8文件。


如果您在Unix的某种变体下运行,则可以使用该file实用程序检查编码(或多或少)。


$ file yourfilename

yourfilename: UTF-8 Unicode English text

(我认为这也可以在终端机的Mac上使用。)不确定如何在Windows下执行此操作。


如果您在Windows系统上的文件(即未使用UTF8编码的文件)上使用相同的实用程序,则可能会显示以下内容:


$ file yourfilename

yourfilename: ASCII text, with CRLF line terminators

如果情况仍然很怪异,则可以尝试将输入数据转换为已知的编码,更改客户端的编码或同时更改两者。(我们真的在扩展我对编码知识的了解。)


您可以使用该iconv实用程序来更改输入数据的编码。


iconv -f original_charset -t utf-8 originalfile > newfile

您可以按照“ 字符集支持”中的说明更改psql(客户端)编码。在该页面上,搜索短语“启用自动字符集转换”。


查看完整回答
反对 回复 2019-12-16
?
慕仙森

TA贡献1827条经验 获得超8个赞

显然,我可以随时设置编码,


 set client_encoding to 'latin1'

然后重新运行查询。不知道我应该使用哪种编码。


latin1使字符清晰易读,但是大多数带重音符号的字符都是大写的,不应该使用大写的。我以为这是由于编码错误所致,但是我认为它实际上是错误的数据。我最终保留了latin1编码,但是对数据进行了预处理并解决了大小写问题。


查看完整回答
反对 回复 2019-12-16
?
波斯汪

TA贡献1811条经验 获得超4个赞

如果可以丢弃不可转换的字符,可以使用-cflag


iconv -c -t utf8 filename.csv > filename.utf8.csv

然后将它们复制到您的表中


查看完整回答
反对 回复 2019-12-16
  • 4 回答
  • 0 关注
  • 2197 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号