2005年11月04日 星期五 09:57
张骏 wrote: > 在 2005-11-03 17:44:35,Qiangning Hong <hongqn at gmail.com> 写道: 各位,把现在的源码贴上来,在罗嗦几句: #-*- coding:utf-8 -*- import os,time iWorkDir=os.path.normpath('D:\Documents and Settings\Arui\桌面\工作夹') iDirList=os.listdir(iWorkDir) iFolderName='-'.join(time.ctime().split()[:3]) if(iFolderName in iDirList): pass else: iNewFolder=os.path.join(iWorkDir,iFolderName) os.mkdir(iNewFolder) 这个在windows下可以运行。 1,现在的文件编码是gb2312,请问这个编码跟cp936有什么不同,各自都有什么作用? 2,关于coding行,我的理解是这样: 在python编译器读入源码的时候,源码中若有常量字符串,则在编译时会用coding 行指定的编码来读取,处理,否则,用系统默认的编码来读取。也就是说,无论我 在源码中使用 os.path.normpath('D:\Documents and Settings\Arui\桌面\工作夹') 还是 os.path.normpath(u'D:\Documents and Settings\Arui\桌面\工作夹') python编译器读取源文件时都会用coding行指定的编码来读取, 不知道这样理解正确否? >>Du Jun wrote: >>>在文件头加入 >>>#-*- coding:utf-8 -*- >>>保存为 cp936,运行ok! >> >>文件头指定的编码应和文件实际编码一致。你这里运行ok其实是你运气好,正好你 >>的cp936的中文用utf-8编码也能解释。 > > 其实结果正确也不能算运气好。 > > coding: utf-8这种指定只对unicode常量字符串有效,对于str,还是以存放时的编码处理。 > 因此,路径实际被normpath处理的时候还是gbk的编码。 > > 也就是说如果 > iWorkDir=os.path.normpath(u'D:\Documents and Settings\Arui\桌面\工作夹') > 这样写,coding设定才起作用。 > > 但是这样写的结果是脚本根本无法执行,因为python在编译这个字符串的时候,utf8无法成功转换。 [发文请剪裁引文,谢谢] coding行不仅仅在创建unicode常量时才使用,它还在python编译器读入源代码的 时候使用。python编译器读入源文件后,首先要先把源文件内容转成unicode再转 成UTF-8字节流,然后再进行语法分析。这一切都发生在编译代码之前。 你可以尝试一下把下面的代码用utf8保存为test.py: # coding: cp936 a = "桌" 然后运行它。这段代码中没有unicode常量,但是却会segmentation fault,至少 在我这里是这样。 -- Qiangning Hong, Registered Linux User #396996 My Blog: http://www.hn.org/hongqn RSS: http://feeds.feedburner.com/hongqn _______________________________________________ python-chinese list python-chinese at lists.python.cn http://python.cn/mailman/listinfo/python-chinese
2005年11月04日 星期五 10:45
在 2005-11-04 09:57:54,"Du Jun" <jdu at haiercct.com.cn> 写道: > 各位,把现在的源码贴上来,在罗嗦几句: > > #-*- coding:utf-8 -*- > import os,time > iWorkDir=os.path.normpath('D:\Documents and Settings\Arui\桌面\工作夹') > iDirList=os.listdir(iWorkDir) > iFolderName='-'.join(time.ctime().split()[:3]) > > if(iFolderName in iDirList): > pass > else: > iNewFolder=os.path.join(iWorkDir,iFolderName) > os.mkdir(iNewFolder) > > 这个在windows下可以运行。 > 1,现在的文件编码是gb2312,请问这个编码跟cp936有什么不同,各自都有什么作用? gbk , gb2312 , cp936 ,gb18030 都对应汉字编码,他们的区别只是含有汉字的个数(容量), 对于同一个汉字,他们对应的编码是一致的。 我比较喜欢使用gbk > 2,关于coding行,我的理解是这样: > 在python编译器读入源码的时候,源码中若有常量字符串,则在编译时会用coding > 行指定的编码来读取,处理,否则,用系统默认的编码来读取。也就是说,无论我 > 在源码中使用 > os.path.normpath('D:\Documents and Settings\Arui\桌面\工作夹') > 还是 > os.path.normpath(u'D:\Documents and Settings\Arui\桌面\工作夹') > python编译器读取源文件时都会用coding行指定的编码来读取, > 不知道这样理解正确否? 暂时还没讨论出结果。不过我的意见倾向于只对unicode常量处理。 -- 张骏 <zhangj at foreseen-info.com> 敏捷来自Python 简单源于我们 丰元信信息技术有限公司
2005年11月04日 星期五 11:24
> > 2,关于coding行,我的理解是这样: > > 在python编译器读入源码的时候,源码中若有常量字符串,则在编译时会用coding > > 行指定的编码来读取,处理,否则,用系统默认的编码来读取。也就是说,无论我 > > 在源码中使用 > > os.path.normpath('D:\Documents and Settings\Arui\桌面\工作夹') > > 还是 > > os.path.normpath(u'D:\Documents and Settings\Arui\桌面\工作夹') > > python编译器读取源文件时都会用coding行指定的编码来读取, > > 不知道这样理解正确否? > 暂时还没讨论出结果。不过我的意见倾向于只对unicode常量处理。 我的理解是这样的。 -- I like python! My Donews Blog: http://www.donews.net/limodou
2005年11月04日 星期五 11:50
Du Jun wrote: > 各位,把现在的源码贴上来,在罗嗦几句: > > #-*- coding:utf-8 -*- > import os,time > iWorkDir=os.path.normpath('D:\Documents and Settings\Arui\桌面\工作夹') 再提醒一遍,用os.path.normpath的时候路径分隔符应该用正斜杠(/),不要用反 斜杠(\),不然os.path.normpath不起作用,你还会遇到问题(比如反斜杠后面的 字符是't'时) [...略...] > 这个在windows下可以运行。 > 1,现在的文件编码是gb2312,请问这个编码跟cp936有什么不同,各自都有什么作用? gb2312和cp936是一样的,只不过一个国家标准,一个微软定义的代码页。 > 2,关于coding行,我的理解是这样: > 在python编译器读入源码的时候,源码中若有常量字符串,则在编译时会用coding 行指定的编码来读取,处理,否则,用系统默认的编码来读取。也就是说,无论我 在源码中使用 > os.path.normpath('D:\Documents and Settings\Arui\桌面\工作夹') > 还是 > os.path.normpath(u'D:\Documents and Settings\Arui\桌面\工作夹') > python编译器读取源文件时都会用coding行指定的编码来读取, > 不知道这样理解正确否? 不正确。在读入源码的时候,不管有没有常量字符串,都会用coding行指定的编码 来读取。如果没有coding行,就用iso-8859-1读取,在这种情况下如果源代码中有 不在ASCII字符集中的字符,则输出DeprecationWarning信息。 从u字符串生成unicode常量是编译阶段的事。 -- Qiangning Hong, Registered Linux User #396996 My Blog: http://www.hn.org/hongqn RSS: http://feeds.feedburner.com/hongqn
Zeuux © 2025
京ICP备05028076号