ustone 发表于 2024-12-19 20:07:29

Python代码文本文件readline读取一行为啥包括了BOM字节顺序标记?

本帖最后由 ustone 于 2024-12-19 20:11 编辑

Python代码文本文件readline读取一行为啥包括了BOM字节顺序标记?
>>> f=open('d:/bar.txt','r',encoding='utf-8')
>>> f.readline()
'\ufeff新年都未有芳华,二月初惊见草芽。\n'
>>> f.readline()
'白雪却嫌春色晚,故穿庭树作飞花。'
>>>

scoopydoo 发表于 2024-12-20 05:13:29

把 utf-8 改成 utf-8-sig 就可以了

f = open('d:/bar.txt', 'r', encoding = 'utf-8-sig')
print(f.readlines())

ustone 发表于 2024-12-20 08:02:48

scoopydoo 发表于 2024-12-20 05:13
把 utf-8 改成 utf-8-sig 就可以了

我要吐槽一下Python的文档,从open函数
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
第几段介绍encoding跳转到codecs,很长的一篇翻到最后才介绍:

encodings.utf_8_sig — UTF-8 codec with BOM signature

This module implements a variant of the UTF-8 codec. On encoding, a UTF-8 encoded BOM will be prepended to the UTF-8 encoded bytes. For the stateful encoder this is only done once (on the first write to the byte stream). On decoding, an optional UTF-8 encoded BOM at the start of the data will be skipped.

感觉文档太难用了,甚至比Qt的都不如。

scoopydoo 发表于 2024-12-20 08:13:42

ustone 发表于 2024-12-20 08:02
我要吐槽一下Python的文档,从open函数
open(file, mode='r', buffering=-1, encoding=None, errors=Non ...

文档的可读性固然重要,但更重要的是严谨可靠,一般情况下直接读文档对大多数人来说未必是最好的学习方式,否则也不会有那么多的书籍和教程了。

其实现在学习的最快最方便的途径是善用搜索引擎,最近 AI 也火了起来,但是偶尔会一本正经地胡说八道,还不可全信。

所谓的面向搜索引擎编程、面向 Stackoverflow 编程,其实是一种很好的学习方式。

ustone 发表于 2024-12-20 08:37:10

scoopydoo 发表于 2024-12-20 08:13
文档的可读性固然重要,但更重要的是严谨可靠,一般情况下直接读文档对大多数人来说未必是最好的学习方式 ...

入门学习我都是看书,查具体的函数用法才会看文档。

scoopydoo 发表于 2024-12-20 08:48:05

ustone 发表于 2024-12-20 08:37
入门学习我都是看书,查具体的函数用法才会看文档。

还是那句话,要善用搜索,其实 Stackoverflow 等网站上面几乎涵盖了初学者可能遇到的所有问题。

junyee 发表于 2024-12-20 08:52:53

因为 utf-8-bom 在 linux 世界就是 \r\n 一样是个异类。
:lol

ustone 发表于 2024-12-20 08:56:16

scoopydoo 发表于 2024-12-20 08:48
还是那句话,要善用搜索,其实 Stackoverflow 等网站上面几乎涵盖了初学者可能遇到的所有问题。

文档是第一手的,Stackoverflow 确实也不错。

ustone 发表于 2024-12-20 08:59:14

junyee 发表于 2024-12-20 08:52
因为 utf-8-bom 在 linux 世界就是 \r\n 一样是个异类。

是个道理,不过函数应该自动判断处理。

scoopydoo 发表于 2024-12-20 09:12:39

ustone 发表于 2024-12-20 08:59
是个道理,不过函数应该自动判断处理。

如果自动处理了,就会有人说为啥不给机会让俺自己判断、处理 ......

scoopydoo 发表于 2024-12-20 09:14:53

ustone 发表于 2024-12-20 08:56
文档是第一手的,Stackoverflow 确实也不错。

没有人入门学习是看参考手册这类详尽严谨但是阅读吃力的文档。

MF35_ 发表于 2024-12-20 14:38:37

本帖最后由 MF35_ 于 2024-12-20 14:40 编辑

编码格式的声明和转换是要手动处理的,所有的语言都是如此

ustone 发表于 2024-12-20 16:02:42

scoopydoo 发表于 2024-12-20 09:12
如果自动处理了,就会有人说为啥不给机会让俺自己判断、处理 ......

如果对一系列文件open操作(for循环),encoding不一样,代码很难统一

ustone 发表于 2024-12-20 16:03:36

scoopydoo 发表于 2024-12-20 09:14
没有人入门学习是看参考手册这类详尽严谨但是阅读吃力的文档。

没错      

ustone 发表于 2024-12-20 16:04:42

MF35_ 发表于 2024-12-20 14:38
编码格式的声明和转换是要手动处理的,所有的语言都是如此

可能是吧
页: [1]
查看完整版本: Python代码文本文件readline读取一行为啥包括了BOM字节顺序标记?