2005年02月19日 星期六 00:18
好象不行。就象底层的文件操作一样,都是ascii字符的,不支持unicode(因为 unicode一般是2个字节)。 先转化为utf-8再传送,收到后再转为unicode即可。 cry wrote: > python,您好! > > 我准备了一个UNICODE字符串,里面又中文又数字,在socket下用send()方法送,居然出现encode错误,难道send是不能发送unicode吗? > > from types import StringType, UnicodeType > ss = s+"\r\n" > print isinstance(ss, UnicodeType) > self._sock.send(ss) > > True > > UnicodeEncodeError: 'ascii' codec can't encode characters in position 34-36: ordinal not in range(128) > > 谁知道这个问题怎么解决吗? > > 看来PYTHON不在核心代码中解决字符编码是不行的。 > > 致 > 礼! > > cry > zyqmail at 163.net > > > _______________________________________________ > python-chinese list > python-chinese at lists.python.cn > http://python.cn/mailman/listinfo/python-chinese > -- I love python! My Blog: http://www.donews.net/limodou
2005年02月19日 星期六 00:25
limodou,您好! 关键是SOCKET的另一端还需要做这种工作,启不是很麻烦。别人做应用也麻烦。 那换一个思路,unicode转换成字节串,用什么方法? 在 2005-02-19 00:18:00 您写道: >好象不行。就象底层的文件操作一样,都是ascii字符的,不支持unicode(因为 >unicode一般是2个字节)。 > >先转化为utf-8再传送,收到后再转为unicode即可。 > >cry wrote: >> python,您好! >> >> 我准备了一个UNICODE字符串,里面又中文又数字,在socket下用send()方法送,居然出现encode错误,难道send是不能发送unicode吗? >> >> from types import StringType, UnicodeType >> ss = s+"\r\n" >> print isinstance(ss, UnicodeType) >> self._sock.send(ss) >> >> True >> >> UnicodeEncodeError: 'ascii' codec can't encode characters in position 34-36: ordinal not in range(128) >> >> 谁知道这个问题怎么解决吗? >> >> 看来PYTHON不在核心代码中解决字符编码是不行的。 >> >> 致 >> 礼! >> >> cry >> zyqmail at 163.net >> >> >> _______________________________________________ >> python-chinese list >> python-chinese at lists.python.cn >> http://python.cn/mailman/listinfo/python-chinese >> > >-- >I love python! >My Blog: http://www.donews.net/limodou >_______________________________________________ >python-chinese list >python-chinese at lists.python.cn >http://python.cn/mailman/listinfo/python-chinese 致 礼! cry zyqmail at 163.net
2005年02月19日 星期六 17:10
unicode和string是两个不同的类型。send只能send string,如果给send一个unicode类型的参数,它会将其自动转化为string,即编码。而在不显示指定编码方式的情况下,则是使用sys.getdefaultencoding()的返回值作为编码方式。这个值默认是'ascii',可以通过在sitecustomize.py中使用sys.setdefaultencoding()来修改。 unicode是一个字符集,可以对应很多种编码方式。UTF-8和UCS-2(即limodou说的"一般是2个字节")是比较常见的unicode编码。 On Sat, 19 Feb 2005 00:18:28 +0800, limodou <limodou at gmail.com> wrote: > 好象不行。就象底层的文件操作一样,都是ascii字符的,不支持unicode(因为 > unicode一般是2个字节)。 > > 先转化为utf-8再传送,收到后再转为unicode即可。 > > cry wrote: > > python,您好! > > > > 我准备了一个UNICODE字符串,里面又中文又数字,在socket下用send()方法送,居然出现encode错误,难道send是不能发送unicode吗? > > > > from types import StringType, UnicodeType > > ss = s+"\r\n" > > print isinstance(ss, UnicodeType) > > self._sock.send(ss) > > > > True > > > > UnicodeEncodeError: 'ascii' codec can't encode characters in position 34-36: ordinal not in range(128) > > > > 谁知道这个问题怎么解决吗? > > > > 看来PYTHON不在核心代码中解决字符编码是不行的。 > > > > 致 > > 礼! > > > > cry > > zyqmail at 163.net > > > > > > _______________________________________________ > > python-chinese list > > python-chinese at lists.python.cn > > http://python.cn/mailman/listinfo/python-chinese > > > > -- > I love python! > My Blog: http://www.donews.net/limodou > _______________________________________________ > python-chinese list > python-chinese at lists.python.cn > http://python.cn/mailman/listinfo/python-chinese > -- Excellent FOSS (Free/Open Source Software): Get Firefox! http://www.spreadfirefox.com/?q=affiliates&id=67907&t=1 Reclaim Your Inbox! http://www.spreadfirefox.com/?q=affiliates&id=67907&t=183
Zeuux © 2025
京ICP备05028076号