1
Delbert 2014-10-24 08:40:40 +08:00 via Android
b是二进制。
我觉得这个不是问题…… |
3
limbo0 2014-10-24 08:57:26 +08:00 1
加个b
|
5
Delbert 2014-10-24 09:03:24 +08:00 via Android
@dbow 我的意思是 t才可以缺省的吧?
图片本身是二进制编码的,所以需要b参数。 https://docs.python.org/3/library/functions.html?highlight=open#open 官方文档说t是缺省的,需要二进制的实习需要用b参数。 所以这个不是编码问题。应该说不加b是你编程的bug 吧…… |
7
timonwong 2014-10-24 09:09:48 +08:00 4
the 'b' is ignored on all POSIX conforming systems, including Linux. (Other systems may treat text files and binary files differently, and adding the 'b' may be a good idea if you do I/O to a binary file and expect that your program may be ported to non-UNIX environments.)
习惯Linux的也需要看看man吧 |
8
zhouzm 2014-10-24 09:09:53 +08:00
楼主对跨平台的期望值太高了,有时候还是需要你针对平台作些特殊处理的,这和 python 的跨平台能力无关。
|
9
clino 2014-10-24 09:16:51 +08:00
这哪里是文件编码的问题,明明是你的问题...
|
12
Jaylee 2014-10-24 10:12:57 +08:00
水平问题
|
13
kidlj 2014-10-24 10:32:38 +08:00 via Android
在小学时候你不做作业就能考100分,到了初中再这样干只能考70分,所以是你的问题,还是中学的问题,或者是小学的问题?
|
14
happywowwow 2014-10-24 10:36:28 +08:00
我也觉得这应该是LZ的问题 不是python的问题
不然应该是linux下w+图片也是乱码 |
15
dbow OP |
16
VYSE 2014-10-24 11:26:12 +08:00
首先在Windows下,不加b会translate \n到\r\n,加b则不translate,应用场景下有人需要translate(因为也有人会觉得一段hello world!\n在Windows下还得加个\r?),也有人不需要translate(\n就是\n)。那如果Python统一了平台间差异,统一不translate binary模式,那又有人抱怨为啥Python没处理hello world\n的平台差异了。
|
17
dbow OP @VYSE 补充一点,实现上python不转换这个,fileobject的write方法调用fwrite, 是底层的C运行时搞的。
|
18
VYSE 2014-10-24 13:04:33 +08:00 via Android
@dbow 所以既然用了libc,python的open和c里的fopen保持一致也没有问题。open函数平台差异只能靠开发者来控制。
|
22
musics 2014-10-24 21:45:47 +08:00
区别楼上已经说了,部分POSIX 不用加也不影响是因为\n还是\n,但是WINODWS不同\n要转换成\r\n,在C这部分,一直是建议读取bin就加b.还是养成 好习惯根据MAN的建议来。
|