<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    vulcan

    低頭做事,抬頭看路

       :: 首頁 :: 聯系 :: 聚合  :: 管理
      41 Posts :: 7 Stories :: 28 Comments :: 0 Trackbacks
    用python處理html entity時,python編碼時出現一些問題,見下面的代碼
    import re
    message 
    = '密碼修改成功'
    regex 
    = '(&#(\\d{5});)'
    entities 
    = re.findall(regex, message)
    for entity in entities:
        message 
    = message.replace(entity[0], unichr(int(entity[1])))
    #print message #在pythonwin中執行沒有問題,在pydev中執行報錯
    print message.encode('gbk'#正常
    為了搞清除為什么會出錯,下面是我做的一些測試.
    下面是對'密碼'兩個字的一些測試,在pythonwin交互窗口中執行,雖然知道了要得到正確的中文該怎么在程序中處理,并且使得程序在pydev和pythonwin
    兩個環境中執行都不出錯,但是卻還是搞不清為什么會這個樣子.先記下罷.有能解釋底層機制的朋友,也請留言幫個忙吧.
    >>> s = '密碼'
    >>> s
    '\xc3\xdc\xc2\xeb'
    >>> su = u'密碼'
    >>> su
    u
    '\xc3\xdc\xc2\xeb'
    #u前綴表示是unicode編碼,但是里面實際存儲的是密碼兩個字的gbk編碼
    >>> print s
    密碼
    >>> print su #在pydev和SciTE中報錯,不能打印
    ?ü??
    >>> char1 = unichr(23494)
    >>> char2 = unichr(30721)
    >>> char1
    u
    '\u5bc6'
    >>> char2
    u
    '\u7801'
    >>> print char1

    >>> print char2

    >>> char = char1 + char2
    >>> char
    u
    '\u5bc6\u7801'
    >>> print char #在pydev和SciTE中會報錯為什么
    密碼
    >>> s.decode('gbk'#變成了unicode編碼16進制
    u'\u5bc6\u7801'
    >>> print s.decode('gbk'#在pydev和SciTE中不能正常打印輸出
    密碼
    >>> char.encode('gbk')
    '\xc3\xdc\xc2\xeb'
    >>> s
    '\xc3\xdc\xc2\xeb'
    >>> su
    u
    '\xc3\xdc\xc2\xeb'
    >>> char
    u
    '\u5bc6\u7801'
    >>> char.encode('gbk')
    '\xc3\xdc\xc2\xeb'
    >>> print s
    密碼
    >>> print char.encode('gbk')
    密碼

    Update 1:
    sys.setdefaultencoding()可以設置默認編碼供轉換時使用,但是Python啟動之后這個方法會被site.py刪除,因此必須reload(sys)然后調用sys.setdefaultencoding
    下面是我的測試方法,根據這里的結果,估計是pythonwin內啟動的交互環境對參數應該有了設置,不過sys.getdefaultencoding()的返回還是默認的ascii:
    '修改密碼成功的html entity是' "&amp;#23494;&amp;#30721;&amp;#20462;&amp;#25913;&amp;#25104;&amp;#21151;",在下面的python代碼中在這個網頁上顯示不對.把&amp;要換成&符號
    #python 2.4 windows, execute in SciTe or Eclipse pydev
    #
    Note: if you execute this script in pythonwin, the result may be different!
    import sys
    import re
    reload(sys) 
    #should do this to setdefault encoding of sys, 
    #
    this method is deleted in site.py [/PYTHON_HOME/Lib] by default

    #try to set default encoding other than default encoding
    #
    default ascii # Error: out 1, out 3, out 6
    #
    sys.setdefaultencoding('gbk')  #all right, but a warning raised
    #
    sys.setdefaultencoding('utf-8')  #out 1, out 3, out 6: unreadable in outputwindow, may be right if change the console encoding
    message = '&amp;#23494;&amp;#30721;&amp;#20462;&amp;#25913;&amp;#25104;&amp;#21151;'
    regex 
    = '(&#(\\d{5});)'
    entities 
    = re.findall(regex, message)
    for entity in entities:
        message 
    = message.replace(entity[0], unichr(int(entity[1])))
    #message : u'\u5bc6\u7801\u4fee\u6539\u6210\u529f'
    print message #out 1
    #
    message.encode('gbk') : '\xc3\xdc\xc2\xeb\xd0\xde\xb8\xc4\xb3\xc9\xb9\xa6'
    print message.encode('gbk'#out 2
    char1 = unichr(23494)
    char2 
    = unichr(30721)
    char 
    = char1 + char2
    #char : u'\u5bc6\u7801'
    print char #out 3
    #
    char.encode('gbk') : '\xc3\xdc\xc2\xeb'
    print char.encode('gbk'#out 4
    s='密碼'
    #s : '\xc3\xdc\xc2\xeb'
    print s #out 5
    #
    s.decode('gbk') : u'\u5bc6\u7801'
    print s.decode('gbk'#out 6
    posted on 2007-11-16 12:59 vulcan 閱讀(2466) 評論(0)  編輯  收藏 所屬分類: Python編程
    主站蜘蛛池模板: 免费亚洲视频在线观看| 免费国产a理论片| 免费播放一区二区三区| 国产午夜亚洲精品国产成人小说| 美国免费高清一级毛片| 免费中文字幕不卡视频| 一级中文字幕乱码免费| 国产亚洲精久久久久久无码77777| 51午夜精品免费视频| 亚洲级αV无码毛片久久精品| 国产一级a毛一级a看免费视频| 夜夜春亚洲嫩草影院| 性无码免费一区二区三区在线| 亚洲国产综合专区在线电影| 日本免费网站视频www区| 精品亚洲国产成人| 在线不卡免费视频| 一级毛片a女人刺激视频免费| 久久久亚洲精品蜜桃臀| 无码囯产精品一区二区免费 | 久久久久亚洲AV成人网| 中文无码日韩欧免费视频| 亚洲欧洲第一a在线观看| 韩国免费一级成人毛片| 亚洲av成人一区二区三区观看在线 | 人人揉揉香蕉大免费不卡| 亚洲国产精品xo在线观看| 免费精品一区二区三区在线观看 | 午夜免费啪视频在线观看 | 免费午夜爽爽爽WWW视频十八禁| 精选影视免费在线 | 日韩精品亚洲人成在线观看 | 最近免费中文字幕mv在线电影 | 日韩色视频一区二区三区亚洲| 成人永久福利免费观看| 亚洲阿v天堂在线2017免费| 久久久婷婷五月亚洲97号色| 日本高清免费不卡在线| 九九99热免费最新版| 亚洲国产成人手机在线电影bd| 亚洲av无码国产精品色在线看不卡 |