Python 板


LINE

※ 引述《kanako (我是香民)》之铭言: : 假设我有一个档案叫test.txt,内容只有一行字: : 中文 : 然後我用如下的码读入(省略之前之後的各个动作) : string = infile.readline().decode('utf-8') : 这样得到的变数跟以下我手动给初值有何不同? : string = u'中文' : 我用sunburnt把资料加入solr时两者都可以加入 : 但只有後者得到的结果可以下中文关键字搜寻到 : 请问一下各位先进我应该如何修改呢? : 谢谢 ※ 引述《kanako (我是香民)》之铭言: : 假设我有一个档案叫test.txt,内容只有一行字: : 中文 : 然後我用如下的码读入(省略之前之後的各个动作) : string = infile.readline().decode('utf-8') : 这样得到的变数跟以下我手动给初值有何不同? : string = u'中文' : 我用sunburnt把资料加入solr时两者都可以加入 : 但只有後者得到的结果可以下中文关键字搜寻到 : 请问一下各位先进我应该如何修改呢? : 谢谢 先回答你的问题 理论上应该要是一样的结果 但实际上在windows下使用会有一些问题 (我也只用过windows目前) 如果你也是用windows的话 可以参考一下我的心得(适用於python2.x) 我在初学有关字串问题时 被windows下美美的idle卡很大 因为正确的观念在美美的idle上会产生错误的结果 後来才在版上爬到文 整个大悟 (如果需要unicode与str的观念我再补 当做已经会了) 先提一下标准的 再提idle下怎麽是搞的 我们写 u"中文" 即等於 "中文".decode("python预设的编码 一般来说是cp950") 因为只要string里有不在ascii编码与跳脱字元(\开头的那些)里的"字" python会自动以预设的编码转换来显示 加上开头的u python会自动把"中文"用cp950去解码成unicode 这是一般的情况 若是只写 "中文" (没有u) python将会自动用cp950转换成 '\xa4\xa4\xa4\xe5' 的string(不是unicode) u开头是将这种特别的字转成unicode方便的写法 很方便 如果windows idle下没有问题的话orz... 在windows的command line下(黑黑的底色那个) 使用 u"中文" 会得到一般正确的结果 u'\u4e2d\u6587' 而读入的string若是utf8格式的 '\xe4\xb8\xad\xe6\x96\x87' 再decode("utf-8")之後也会正确得出 u'\u4e2d\u6587' 但是在windows 美美的idle下 u"中文" 却得到 u'\xa4\xa4\xa4\xe5' 这是什麽东西呢(很显然不是正确的 因为根本没辨法encode回去) 原因是在idle下 u"中文" 并不等於 "中文".decode("cp950") 这是idle最怪的地方 由结果推论起来 在idle下的 u"中文" 仅是把 "中文"原始编码下的值('\xa4\xa4\xa4\xe5') 转成unicode 变成先转换"中文"(非常奇怪的做法)之後 再结合u 相当於转换 u"\xa4\xa4\xa4\xe5" 因为没有不合法的字 就直接还是 u"\xa4\xa4\xa4\xe5" 奇怪的结果... 更奇怪的是idle还可以print的出来结果...在我的电脑上长这样--> ¤¤¤å 在command line下print不出来才是合理的 因为无法编成cp950相对应的string 所以在idle下 请使用 "中文".decode("cp950") 这种方式来得到正确的unicode 另外在windows下的 文字文件 档案中 若有输入中文的话 存档可以选择ansi 但其实windows会帮你偷偷用系统预设的编码存 一般是cp950 所以若读档时用utf8读cp950是有问题的(通常会转换失败、报错) 以上 有错请指正 谢谢 --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 180.176.140.46
1F:推 kdjf:看完只想说:来用linux吧 (逃 10/29 00:38
2F:→ legnaleurc:如果加上 #-*- coding: utf-8 -*- 呢? 10/29 02:47
3F:→ KSJ:嗯 推楼上 在script下加注coding就行了 10/30 00:23
4F:→ KSJ:另外在idle下要注意str的编码问题 10/30 00:27
5F:→ KSJ:有时候print出来的结果一样 不代表本身是一样的(编码) 10/30 00:28
6F:→ uranusjr:看完之後真的只能说 Windows sucks XD 10/30 16:25
7F:→ kdjf:windows is not for programers... 10/31 00:08
8F:推 kanako:谢谢大家,我的程式是在freebsd下执行,问题已避开,我猜是 11/08 18:09
9F:→ kanako:python呼叫solr时码不知道被系统怎麽转了 11/08 18:10







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Boy-Girl站内搜寻

TOP