• 文件头多了一个ufeff字符


      在学习python从文件中读取文件,并将文件中的字符串转化为列表的时候,发现文件头多了一个ufeff字符。

      这个问题前段时间也遇到过了,同样是上网搜索了半天才解决,当时只是把问题解决就过去了,但是今天遇到同样的问题时,知道有这么一个解决方法,但是怎么做就是想不起来。古人云,好记性不如烂笔头,一点没错。进入正题。

      几个概念性的东西   

      ANSCII: 

    标准的 ANSCII 编码只使用7个比特来表示一个字符,因此最多编码128个字符。扩充的 ANSCII 使用8个比特来表示一个字符,最多也只能 
    编码 256 个字符。

      UNICODE:
    使用2个甚至4个字节来编码一个字符,因此可以将世界上所有的字符进行统一编码。

      UTF:
    UNICODE编码转换格式,就是用来指导如何将 unicode 编码成适合文件存储和网络传输的字节序列的形式 (unicode ->
    str)。像其他的一些编码方式 gb2312, gb18030, big5 和 UTF 的作用是一样的,只是编码方式不同。

    在Windows下用文本编辑器创建的文本文件,如果选择以UTF-8等Unicode格式保存,会在文件头(第一个字符)加入一个BOM标识。
      什么是BOM?
    
    
      BOM = Byte Order Mark
    
    
      BOM是Unicode规范中推荐的标记字节顺序的方法。比如说对于UTF-16,如果接收者收到的BOM是FEFF,表明这个字节流是Big-Endian的;如果收到FFFE,就表明这个字节流是Little-Endian的。
      UTF-8不需要BOM来表明字节顺序,但可以用BOM来表明“我是UTF-8编码”。BOM的UTF-8编码是EF BB BF(用UltraEdit打开文本、切换到16进制可以看到)。所以如果接收者收到以EF BB BF开头的字节流,就知道这是UTF-8编码了。

    具体方法请看下面代码
    复制代码
     1 # filename: example.py
     2 # conding=utf-8
     3 
     4 f = open("news.txt", "r",encoding='utf-8')
     5 file = f.read()
     6 file_list = file.split(",")
     7 print(file_list)
     8 
     9 file_list2 = file.encode('utf-8').decode('utf-8-sig')
    10 print(file_list2)
    11 
    12 
    13 #打印结果如下
    14 ['ufeff新华社北京2月8日电2月8日']
    15 新华社北京2月8日电2月8日
    复制代码

    不懂的还很多,慢慢积累。
  • 相关阅读:
    VK Cup 2012 Qualification Round 1 C. Cd and pwd commands 模拟
    VK Cup 2015
    DP总结 ——QPH
    Codeforces Round #244 (Div. 2) B. Prison Transfer 线段树rmq
    Codeforces Round #311 (Div. 2) E. Ann and Half-Palindrome 字典树/半回文串
    Codeforces Round #311 (Div. 2) D. Vitaly and Cycle 图论
    Codeforces Round #311 (Div. 2) C. Arthur and Table Multiset
    Codeforces Round #311 (Div. 2)B. Pasha and Tea 水题
    Codeforces Round #311 (Div. 2) A. Ilya and Diplomas 水题
    Codeforces Round #260 (Div. 1) D. Serega and Fun 分块
  • 原文地址:https://www.cnblogs.com/vincent-sh/p/12701465.html
Copyright © 2020-2023  润新知