Python论坛  - 讨论区

标题:[python-chinese] 如何指定文本文件的编码?

2006年12月20日 星期三 20:00

Cauchy Song cauchy.song在gmail.com
星期三 十二月 20 20:00:41 HKT 2006

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

例如:
1. 如果我需要用UTF-8或GB18030编码读取/写入文本文件,该怎样打开文件?
2. 如果我需要用UTF-8或UTF-16写入文本文件,并且可以指定是否需要BOM,该
怎么做?


-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.5 (MingW32)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iD8DBQFFiSXo90pbDJCgbHoRAiylAJ4+cy8AkHY9jcXACg9rjsWfzFs1NQCdEJ9l
2ozwu8wOJOIXypwfCJ54LJs=
=zZ8l
-----END PGP SIGNATURE-----


[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年12月20日 星期三 20:09

WangXinxi wangxinxi在cs.hit.edu.cn
星期三 十二月 20 20:09:30 HKT 2006

我想用socket编写一个小的聊天程序。
我已经实现了这样的功能:
server端;

while ... :
	....
	msg_in = sck.recv(...)
	print s
	msg_out = raw_input()
	sck.sendall(msg_out)
	...

客户端类似。

这样做感觉很不好。因为只有等到别人发信息过来,接收到了,自己才可以发送过
去。我想开两个线程,一个负责发送,一个负责读取。两个线程独立工作,但是只
使用一个socket。不知道怎么做。

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年12月20日 星期三 21:12

xxmplus xxmplus在gmail.com
星期三 十二月 20 21:12:47 HKT 2006

尝试udp

On 12/20/06, WangXinxi <wangxinxi at cs.hit.edu.cn> wrote:
> 我想用socket编写一个小的聊天程序。
> 我已经实现了这样的功能:
> server端;
>
> while ... :
>         ....
>         msg_in = sck.recv(...)
>         print s
>         msg_out = raw_input()
>         sck.sendall(msg_out)
>         ...
>
> 客户端类似。
>
> 这样做感觉很不好。因为只有等到别人发信息过来,接收到了,自己才可以发送过
> 去。我想开两个线程,一个负责发送,一个负责读取。两个线程独立工作,但是只
> 使用一个socket。不知道怎么做。
> _______________________________________________
> python-chinese
> Post: send python-chinese at lists.python.cn
> Subscribe: send subscribe to python-chinese-request at lists.python.cn
> Unsubscribe: send unsubscribe to  python-chinese-request at lists.python.cn
> Detail Info: http://python.cn/mailman/listinfo/python-chinese


-- 
Any complex technology which doesn't come with documentation must be the best
available.

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年12月20日 星期三 21:24

limodou limodou在gmail.com
星期三 十二月 20 21:24:04 HKT 2006

On 12/20/06, xxmplus <xxmplus在gmail.com> wrote:
> 尝试udp
>
> On 12/20/06, WangXinxi <wangxinxi在cs.hit.edu.cn> wrote:
> > 我想用socket编写一个小的聊天程序。
> > 我已经实现了这样的功能:
> > server端;
> >
> > while ... :
> >         ....
> >         msg_in = sck.recv(...)
> >         print s
> >         msg_out = raw_input()
> >         sck.sendall(msg_out)
> >         ...
> >
> > 客户端类似。
> >
> > 这样做感觉很不好。因为只有等到别人发信息过来,接收到了,自己才可以发送过
> > 去。我想开两个线程,一个负责发送,一个负责读取。两个线程独立工作,但是只
> > 使用一个socket。不知道怎么做。

使用异步框架,在ulipad中实现了。

-- 
I like python!
UliPad <>: http://wiki.woodpecker.org.cn/moin/UliPad
My Blog: http://www.donews.net/limodou

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年12月20日 星期三 21:35

WangXinxi wangxinxi在cs.hit.edu.cn
星期三 十二月 20 21:35:29 HKT 2006

I'll hava a try.

On Wed, 2006-12-20 at 21:24 +0800, limodou wrote:
> On 12/20/06, xxmplus <xxmplus在gmail.com> wrote:
> > 尝试udp
> >
> > On 12/20/06, WangXinxi <wangxinxi在cs.hit.edu.cn> wrote:
> > > 我想用socket编写一个小的聊天程序。
> > > 我已经实现了这样的功能:
> > > server端;
> > >
> > > while ... :
> > >         ....
> > >         msg_in = sck.recv(...)
> > >         print s
> > >         msg_out = raw_input()
> > >         sck.sendall(msg_out)
> > >         ...
> > >
> > > 客户端类似。
> > >
> > > 这样做感觉很不好。因为只有等到别人发信息过来,接收到了,自己才可以发送过
> > > 去。我想开两个线程,一个负责发送,一个负责读取。两个线程独立工作,但是只
> > > 使用一个socket。不知道怎么做。
> 
> 使用异步框架,在ulipad中实现了。
> 
> -- 
> I like python!
> UliPad <>: http://wiki.woodpecker.org.cn/moin/UliPad
> My Blog: http://www.donews.net/limodou
> _______________________________________________
> python-chinese
> Post: send python-chinese在lists.python.cn
> Subscribe: send subscribe to python-chinese-request在lists.python.cn
> Unsubscribe: send unsubscribe to  python-chinese-request在lists.python.cn
> Detail Info: http://python.cn/mailman/listinfo/python-chinese

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年12月21日 星期四 09:04

大熊 bearsprite在gmail.com
星期四 十二月 21 09:04:50 HKT 2006

可以使用codecs模块的open函数来打开文件

2006/12/20, Cauchy Song <cauchy.song在gmail.com>:
>
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> 例如:
> 1. 如果我需要用UTF-8或GB18030编码读取/写入文本文件,该怎样打开文件?
> 2. 如果我需要用UTF-8或UTF-16写入文本文件,并且可以指定是否需要BOM,该
> 怎么做?
>
>
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.4.5 (MingW32)
> Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
>
> iD8DBQFFiSXo90pbDJCgbHoRAiylAJ4+cy8AkHY9jcXACg9rjsWfzFs1NQCdEJ9l
> 2ozwu8wOJOIXypwfCJ54LJs=
> =zZ8l
> -----END PGP SIGNATURE-----
>
> _______________________________________________
> python-chinese
> Post: send python-chinese在lists.python.cn
> Subscribe: send subscribe to python-chinese-request在lists.python.cn
> Unsubscribe: send unsubscribe to  python-chinese-request在lists.python.cn
> Detail Info: http://python.cn/mailman/listinfo/python-chinese




-- 
茫茫人海,你是我的最爱
-------------- 下一部分 --------------
一个HTML附件被移除...
URL: http://python.cn/pipermail/python-chinese/attachments/20061221/7ae21aea/attachment-0001.html 

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年12月21日 星期四 14:42

Zhao YM zhaoyeming在gmail.com
星期四 十二月 21 14:42:26 HKT 2006

On Wed, Dec 20, 2006 at 11:12:47PM +1000, xxmplus wrote:
> 尝试udp
> 
> On 12/20/06, WangXinxi <wangxinxi at cs.hit.edu.cn> wrote:
> > 我想用socket编写一个小的聊天程序。
> > 我已经实现了这样的功能:
> > server端;
> >
> > while ... :
> >         ....
> >         msg_in = sck.recv(...)
> >         print s
> >         msg_out = raw_input()
> >         sck.sendall(msg_out)
> >         ...
> >
> > 客户端类似。
> >
> > 这样做感觉很不好。因为只有等到别人发信息过来,接收到了,自己才可以发送过
> > 去。我想开两个线程,一个负责发送,一个负责读取。两个线程独立工作,但是只
> > 使用一个socket。不知道怎么做。

可以用select

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年12月22日 星期五 15:09

Cauchy Song cauchy.song在gmail.com
星期五 十二月 22 15:09:16 HKT 2006

谢谢,我可以正确读UTF-8/GB18030了,但是没有办法正确写UTF-8/GB18030文件。我的py文件用的编码是不带BOM的UTF-8,内容如下:
[code]
#!/usr/bin/env python
#-*- coding: UTF-8 -*-
#
# 测试编码解码
#

import codecs

f = codecs.open('gb18030.txt', 'rb', 'GB18030')
line = f.readline()
while line != '':
    print line
    line = f.readline()
f.close()

f = codecs.open('utf8.txt', 'rb', 'UTF-8')
line = f.readline()
while line != '':
    print line
    line = f.readline()
f.close()

f = codecs.open('tmp_gb18030.txt', 'wb', 'GB18030')
f.write('GB18030编码文件\n')
f.close();

f2 = codecs.open('tmp_utf8.txt', 'wb', 'utf_8')
f2.write('UTF-8 编码文件\n')
f2.close();
[/code]

运行结果是:

GB18030编码文件
UTF-8不带签名
Traceback (most recent call last):
  File "utf8_test.py", line 24, in ?
    f.write('GB18030缂栫爜鏂囦欢\n')
  File "C:\usr\Python24\lib\codecs.py", line 501, in write
    return self.writer.write(data)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe7 in position 7: ordinal
not in range(128)

请问是哪里出错了?

2006/12/21, 大熊 <bearsprite at gmail.com>:
> 可以使用codecs模块的open函数来打开文件
>
> 2006/12/20, Cauchy Song <cauchy.song at gmail.com>:
> >
> > -----BEGIN PGP SIGNED MESSAGE-----
> > Hash: SHA1
> >
> > 例如:
> > 1. 如果我需要用UTF-8或GB18030编码读取/写入文本文件,该怎样打开文件?
> > 2. 如果我需要用UTF-8或UTF-16写入文本文件,并且可以指定是否需要BOM,该
> > 怎么做?
> >

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年12月22日 星期五 16:56

Yunfeng Tao taoyfeng在gmail.com
星期五 十二月 22 16:56:22 HKT 2006

文本文件为什么要用b模式打开?

2006/12/22, Cauchy Song <cauchy.song在gmail.com>:
> f = codecs.open('gb18030.txt', 'rb', 'GB18030')
> f = codecs.open('utf8.txt', 'rb', 'UTF-8')
> f = codecs.open('tmp_gb18030.txt', 'wb', 'GB18030')
> f2 = codecs.open('tmp_utf8.txt', 'wb', 'utf_8')

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年12月24日 星期日 15:52

Cauchy Song cauchy.song在gmail.com
星期日 十二月 24 15:52:30 HKT 2006

这个不是问题,在unix/linux中,b/t都没有作用。
我是尝试各种组合能否起作用而已。

2006/12/22, Yunfeng Tao <taoyfeng at gmail.com>:
> 文本文件为什么要用b模式打开?
>

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2025

    京ICP备05028076号