找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 2457|回复: 4

[已解决] 关于linux和Windows不同环境下文本编码的问题

1

主题

6

帖子

6

积分

贫民

积分
6
pikefreeman 发表于 2019-7-4 23:39:33 | 显示全部楼层 |阅读模式
本帖最后由 pikefreeman 于 2019-7-5 13:24 编辑

在学习python基础教程第十三章数据库时书上有个例子,让我写了一个python脚本用来将ascii格式的纯文本文件导入数据库,脚本代码如下:
  1. import sqlite3

  2. def convert(value):
  3.     if value.startswith('~'):
  4.         return value.strip('~')
  5.     if not value:
  6.         value = '0'
  7.     return float(value)

  8. conn = sqlite3.connect('food.db')
  9. curs = conn.cursor()

  10. curs.execute('''
  11. CREATE TABLE food(

  12. id TEXT PRIMARY KEY,
  13. desc    TEXT,
  14. water   FLOAT,
  15. kcal    FLOAT,
  16. protein FLOAT,
  17. fat     FLOAT,
  18. ash     FLOAT,
  19. carbs   FLOAT,
  20. fiber   FLOAT,
  21. sugar   FLOAT
  22. )
  23. ''')
  24. query = 'INSERT INTO food VALUES (?,?,?,?,?,?,?,?,?,?)'
  25. field_count = 10
  26. for line in open('ABBREV.txt'):
  27.     fields = line.split('^')
  28.     vals = [convert(f) for f in fields[:field_count]]
  29.     curs.execute(query, vals)

  30. conn.commit()
  31. conn.close()
复制代码
然后再linux下运行发生错误:
  1. Traceback (most recent call last):
  2.   File "importdata.py", line 31, in <module>
  3.     for line in open('ABBREV.txt'):
  4.   File "/usr/lib/python3.7/codecs.py", line 322, in decode
  5.     (result, c**umed) = self._buffer_decode(data, self.errors, final)
  6. UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe9 in position 5194: invalid continuation byte
复制代码
说是编码错误?到底是哪里的编码不对?在windows环境下执行代码没有任何问题,谢谢各位!
回复

使用道具 举报

0

主题

956

帖子

956

积分

圣骑士

积分
956
sheeboard 发表于 2019-7-5 11:20:07 | 显示全部楼层

回帖奖励 +1 点威望

windows下是gbk,linux下默认是utf8。windows下ABBREV.txt另存为utf8编码的文件再试试。或者linux下open文件的时候指定编码。
回复 支持 反对

使用道具 举报

1

主题

6

帖子

6

积分

贫民

积分
6
pikefreeman  楼主| 发表于 2019-7-5 12:18:27 | 显示全部楼层
sheeboard 发表于 2019-7-5 11:20
windows下是gbk,linux下默认是utf8。windows下ABBREV.txt另存为utf8编码的文件再试试。或者linux下open文 ...

windows下格式是ANSI的或者utf-8运行都没有问题,linux以ascii编码打开也没有问题,问题就是用python运行的时候会出现编码错误,我不知道怎么在运行程序的时候指定文本的编码格式
回复 支持 反对

使用道具 举报

0

主题

956

帖子

956

积分

圣骑士

积分
956
sheeboard 发表于 2019-7-5 13:00:45 | 显示全部楼层
pikefreeman 发表于 2019-7-5 12:18
windows下格式是ANSI的或者utf-8运行都没有问题,linux以ascii编码打开也没有问题,问题就是用python运行 ...

就是open()里加encoding='utf-8',utf-8这里用你文件实际的编码。
回复 支持 反对

使用道具 举报

1

主题

6

帖子

6

积分

贫民

积分
6
pikefreeman  楼主| 发表于 2019-7-5 13:23:34 | 显示全部楼层
sheeboard 发表于 2019-7-5 13:00
就是open()里加encoding='utf-8',utf-8这里用你文件实际的编码。

问题解决了,非常感谢!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表