我真的对codecs.open function很困惑。当我这样做的时候:

file = codecs.open("temp","w","utf-8")

file.write(codecs.BOM_UTF8)

file.close()

它给了我错误

UnicodeDecodeError: 'ascii' codec can't decode byte 0xef in position

0: ordinal not in range(128)

如果我这样做:

file = open("temp","w")

file.write(codecs.BOM_UTF8)

file.close()

它很好用。

问题是为什么第一种方法失败了?如何插入物料清单?

如果第二种方法是正确的方法,那么使用codecs.open(filename,"w","utf-8")有什么意义?

不要使用UTF-8格式的BOM。拜托。

@克里斯蒂安?为什么不呢?

@UTF-8中不需要salmanpk-bom,只会增加复杂性(例如,不能将bom的文件和结果与有效文本连接在一起)。看到这个问题,不要错过问题下面的重要评论。

我认为问题在于codecs.BOM_UTF8是字节字符串,而不是Unicode字符串。我怀疑文件处理程序试图根据"我打算将Unicode作为UTF-8编码文本写入,但您给了我一个字节字符串"来猜测您真正的意思!

尝试直接为字节顺序标记(即unicode u+feff)编写unicode字符串,以便文件将其编码为utf-8:

import codecs

file = codecs.open("lol","w","utf-8")

file.write(u'\ufeff')

file.close()

(这似乎给出了正确的答案——一个包含字节ef bb bf的文件。)

edit:s.lott建议使用"utf-8-sig"作为编码,这比自己显式地编写BOM要好,但我将把这个答案留在这里,因为它解释了以前发生的问题。

多谢你这么做,肯定让事情更清楚了。

警告:打开和打开不同。如果您执行"从编解码器导入打开",它将不会与您只需键入"打开"相同。

您也可以使用codecs.open("test.txt"、"w"、"utf-8-sig")。

我得到"typeerror:需要一个整数(得到str类型)"。我不明白我们在这里做什么。有人能帮忙吗?我需要在文本文件中附加一个字符串(段落)。在写之前我需要先把它转换成整数吗?

@穆根:据我所知,我写的确切代码工作得很好。我建议你问一个新的问题,精确地显示你得到了什么代码,以及错误发生在哪里。

@穆根,你需要打电话给codecs.open,而不是直接打给open

阅读以下内容:http://docs.python.org/library/codecs.html module-encodings.utf_8_sig

这样做

with codecs.open("test_output","w","utf-8-sig") as temp:

temp.write("hi mom

")

temp.write(u"This has ?")

生成的文件是带有预期BOM的UTF-8。

谢谢。这是有效的(Windows7x64,python 2.7.5x64)。当您以模式"A"(附加)打开文件时,此解决方案工作良好。

首先是import codecs。

这对我不起作用,Windows上的python 3。我必须用open(file_name,'wb')作为bom file:bom file.write(codecs.bom_utf8)来代替,然后重新打开该文件进行append。

@S-LOTT给出了正确的过程,但是在Unicode问题上进行扩展,Python解释器可以提供更多的见解。

jon skeet对于codecs模块是正确的(不寻常的),它包含字节字符串:

>>> import codecs

>>> codecs.BOM

'\xff\xfe'

>>> codecs.BOM_UTF8

'\xef\xbb\xbf'

>>>

选择另一个NIT,BOM有一个标准的Unicode名称,可以输入为:

>>> bom= u"

{ZERO WIDTH NO-BREAK SPACE}"

>>> bom

u'\ufeff'

也可通过unicodedata访问:

>>> import unicodedata

>>> unicodedata.lookup('ZERO WIDTH NO-BREAK SPACE')

u'\ufeff'

>>>

我使用file*nix命令将未知字符集文件转换为utf-8文件

# -*- encoding: utf-8 -*-

# converting a unknown formatting file in utf-8

import codecs

import commands

file_location ="jumper.sub"

file_encoding = commands.getoutput('file -b --mime-encoding %s' % file_location)

file_stream = codecs.open(file_location, 'r', file_encoding)

file_output = codecs.open(file_location+"b", 'w', 'utf-8')

for l in file_stream:

file_output.write(l)

file_stream.close()

file_output.close()

现在,您还可以使用chardet。

使用# coding: utf8而不是# -*- coding: utf-8 -*-,这更容易记住。

python文件写入utf-8_关于utf 8:用Python写入UTF-8文件相关推荐

  1. Python读取多个excel文件(删除字段、数据格式转换、dataframe多表合并)并写入ElasticSearch实战(自动创建索引、写入ElasticSearch、探索性数据分析)

    Python读取多个excel文件(删除字段.数据格式转换.dataframe多表合并)并写入ElasticSearch实战(自动创建索引.写入ElasticSearch.探索性数据分析) 目录

  2. python写入一个文件之前可以不打开_如何用python实现真正的打开和关闭文件

    file_name:file_name变量是一个包含了你要访问的文件名称的字符串值. access_mode:access_mode决定了打开文件的模式:只读,写入,追加等.所有可取值见如下的完全列表 ...

  3. python写入mysql数据库_python调用http接口,数据写入mysql数据库并下载录音文件

    写个脚本一共完成了三件事: 第一,python调用http接口, 第二,把调用到的数据写入mysql数据库, 第三,python调用wsdl接口,获取录音文件, import time import ...

  4. python为运行为何出现乱码_我的python写入文件正常,打开后却是乱码格式为什么?...

    windows7 +2.7.5 我的源代码: #!/usr/bin/env python # -*- coding: utf-8 -*- file = open(r"D:\Android\p ...

  5. python写入文件没反应_记第一个问题——python文件无法写入数据

    原博文 2019-11-18 23:47 − import getpass username = input("please input your name:") password ...

  6. python使用pandas中的to_json函数将dataframe数据写入json文件中

    python使用pandas中的to_json函数将dataframe数据写入json文件中 目录 python使用pandas中的to_json函数将dataframe数据写入json文件中 #导入 ...

  7. python写入excel文件保存在哪里_万字长文记录Python读写EXCEL文件常用方法大全

    python读写excel的方式有很多,不同的模块在读写的讲法上稍有区别,这里我主要介绍几个常用的方式. 用xlrd和xlwt进行excel读写; 用openpyxl进行excel读写; 用panda ...

  8. python中write函数_第9.7节 Python使用write函数写入文件内容

    一.语法 write(data) data为要写入的数据,可以为字符串str类型,也可以是bytes类型. 返回值为实际写入的数据数,在写入数据为str类型时,该数据为实际写入的UNIOCODE字符数 ...

  9. Python文件内容读取成绩单,计算出平均分并且写入原文件存储

    python文件内容读取成绩单,计算出平均分并且写入原文件存储 文件内容如下:( 格式参考下表, 内容自己定义) 姓名 语文 数学 英语 aaa 80 70 65 bbb 85 88 90 ccc 7 ...

  10. python文件处理基础_第六篇:python基础之文件处理

    阅读目录 一.文件处理流程 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 正趣果上果 Interesting fruit fruit 词:郭婞 曲:陈粒 编曲/混音/和声: ...

最新文章

  1. python和R对dataframe的拼接、采样、链式操作:dplyr、tidyr、concat、rbind、cbind、sample、sample_n、set.seed、mutate、filter
  2. 别人家的爸爸!为了解释区块链,阿里工程师给儿子画了一本童话书
  3. 区块链今年,胜过过去十年
  4. IOS学习笔记之二十二(文件io)
  5. 小白 LeetCode 5605 检查两个字符串数据是否相等
  6. atoi函数_每日干货丨C语言中的字符串处理库函数介绍与实现
  7. C++socket编程(七):7.1 http协议讲解,通过抓包和telnet分析
  8. c#实现播放器的集中方式
  9. 人员管理系统 java_员工管理系统java版
  10. hau 1874 畅通工程续
  11. Pyramidal Feature Shrinking for Salient Object Detection
  12. 用计算机打课程表,怎么用电脑做课程表
  13. 基于LVD、贝叶斯模型算法实现的电商行业商品评论与情感分析案例
  14. 如何在Tanzu Cluster中使用vSphere with Tanzu内置容器注册表
  15. 《区块链技术原理》笔记
  16. 专访实战专家,揭秘iOS神奇开发之路
  17. C语言程序设计教程的读后感,c语言程序设计观后感
  18. p2p银行充值功能模块 支付宝调用
  19. hh模型仿真matlab程序,gardner算法算法matlab仿真请教(附程序)
  20. 整理的AD/2000技巧

热门文章

  1. DOS、Mac 和 Unix 文件格式
  2. MapReduce代码编写--求性别人数、求总分、关联、map端的过滤、combiner预聚合
  3. Oracle 储存生僻字
  4. C语言程序设计-五子棋游戏设计系统01
  5. python0表示剪刀_简化Python代码(石头、纸、剪刀)
  6. 关于ECW文件格式读取
  7. django项目支持外网访问--花生壳
  8. 飞机躲子弹小游戏案例
  9. 【小月电子】ALTERA FPGA开发板系统学习教程-LESSON12 IPCORE核之FIFO详细教程
  10. 7.12 vowels.c 程序