2007年12月02日 星期日 02:13
用UTF-8编码来统一*.py代码、数据库和网页输出也许是比较方便,但是使用gb2312或者gbk来统一,却有以下好处: 1、以前的数据库中的数据不需要做代码转换,就能直接使用; 2、在windows命令窗口不需要切换代码页就能直接查看和编辑数据库内容; 3、不会出现编码截断错误; 4、所有的*.py代码都不用保存为utf-8格式,这样用不支持编码转换的编辑器也能够编辑; 5、消除潜在的错误。 目前出现的Django+Sqlite3教程中,大都建议统一成UTF-8,反而大家熟悉的gb2312和gbk很少被提到。也许是因为django和sqlite3默认对utf-8的支持太有力掩盖了它们对其他编码方式的支持? Sqlite3对gbk编码的支持几乎是自然而然的,用命令行sqlite3 test.db打开一个数据库,随便创建一个表,然后插入gbk中文,再查看,结果显示的就是gbk中文;存入utf-8中文,select出来就是utf-8中文。你存进去的是什么编码,select出来的就还是什么编码。所以Sqlite3支持gbk是没有任何问题的。 而Django呢,虽然它建议初学者使用utf-8,但它仍然保留了修改编码方式的接口,只不过这个接口有点不彻底。在global_settings.py文件中,有一行: DEFAULT_CHARSET = 'utf-8' 说明django中默认的编码方式是utf-8,如果要使用gbk,很简单,在自己的Project目录下的settings.py中加入: DEFAULT_CHARSET = 'gbk' 就行,因为settings.py中的设置会覆盖global_settings.py中的。 可是,单单改这一个地方还不够,还有一个地方必须改,否则会出现OperationalError: Could not decode to UTF-8 column ...错误。这是因为django默认为从sqlite3返回的一定是utf-8编码的内容,如果返回的是gbk,就会报错。要纠正这一误会也很简单,需要在djanggo\db\backends\sqlite3\base.py中在59行前插入: self.connection.text_factory = str 同时将64行注释掉: #cursor.row_factory = utf8rowFactory 至于text_factory和row_factory是什么含义,在Python的Documents中有,请自查。 完成这两个步骤以后,恭喜你,现在的Django+Sqlite3已经可以支持gbk了,不知你感觉怎么样? 反正我是觉得很爽。 --- Ben Luo <benluo在gmail.com>写道: > On Nov 25, 2007 9:15 PM, Shao Feng > <sevenever在gmail.com> wrote: > > > > > > > On Nov 25, 2007 10:18 AM, limodou > <limodou在gmail.com> wrote: > > > > > On Nov 25, 2007 12:23 AM, Shao Feng > <sevenever在gmail.com> wrote: > > > > -----BEGIN PGP SIGNED MESSAGE----- > > > > Hash: SHA1 > > > > > > > > 大家好: > > > > 我初学django,跟着limodou的Django step by > step学。 > > > > 我在一个文件开头声明了 -*- coding:gbk > -*-, > 然后保存为gbk编码,但是在浏览的页面里出现了乱码。 > > > > 如果把浏览器 查看-->字符编码 选择 > 中文gbk,就能正常显示了。 > > > > > > > 当然不一定,但是要统一。 > > > > > > limodou前辈说的统一是哪些东西要统一啊?是说文件开头声明的编码和实际文件编码要统一吗?还是所有的py文件都要统一编码? > > > > > > Django最终是显示为html页面。你只要保证最终显示的页面格式是统一的应该就可以了吧。不过为了让事情简单,你可以所有的都按utf-8来编码。 > > _______________________________________________ > 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 ___________________________________________________________ 进入雅虎游戏嘉年华,赢取液晶显示器! http://cn.mail.yahoo.com/promo/carnival07/
2007年12月02日 星期日 09:16
±àÂëÎÊÌâÊDZȽÏÍ·ÌÛ£¬µ«Èç¹û¶¼ÊÇutf-8 ÎÊÌâµ¹²»ÊǺܶࡣ ÔÚ07-12-2£¬qinming zheng <zqm_zqm在yahoo.com.cn> дµÀ£º > > > ÓÃUTF-8±àÂëÀ´Í³Ò»*.py´úÂë¡¢Êý¾Ý¿âºÍÍøÒ³Êä³öÒ²ÐíÊDZȽϷ½±ã£¬µ«ÊÇʹÓÃgb2312»òÕßgbkÀ´Í³Ò»£¬È´ÓÐÒÔϺô¦£º > > 1¡¢ÒÔǰµÄÊý¾Ý¿âÖеÄÊý¾Ý²»ÐèÒª×ö´úÂëת»»£¬¾ÍÄÜÖ±½ÓʹÓã» > > 2¡¢ÔÚwindowsÃüÁî´°¿Ú²»ÐèÒªÇл»´úÂëÒ³¾ÍÄÜÖ±½Ó²é¿´ºÍ±à¼Êý¾Ý¿âÄÚÈÝ£» > > 3¡¢²»»á³öÏÖ±àÂë½Ø¶Ï´íÎó£» > > 4¡¢ËùÓеÄ*.py´úÂë¶¼²»Óñ£´æÎªutf-8¸ñʽ£¬ÕâÑùÓò»Ö§³Ö±àÂëת»»µÄ±à¼Æ÷Ò²Äܹ»±à¼£» > > 5¡¢Ïû³ýDZÔڵĴíÎó¡£ > > > > Ŀǰ³öÏÖµÄDjango+Sqlite3½Ì³ÌÖУ¬´ó¶¼½¨Òéͳһ³ÉUTF-8£¬·´¶ø´ó¼ÒÊìϤµÄgb2312ºÍgbkºÜÉÙ±»Ìáµ½¡£Ò²ÐíÊÇÒòΪdjangoºÍsqlite3ĬÈ϶Ôutf-8µÄÖ§³ÖÌ«ÓÐÁ¦ÑÚ¸ÇÁËËüÃÇ¶ÔÆäËû±àÂ뷽ʽµÄÖ§³Ö£¿ > > Sqlite3¶Ôgbk±àÂëµÄÖ§³Ö¼¸ºõÊÇ×ÔÈ»¶øÈ»µÄ£¬ÓÃÃüÁîÐÐsqlite3 > test.db´ò¿ªÒ»¸öÊý¾Ý¿â£¬ > Ëæ±ã´´½¨Ò»¸ö±í£¬È»ºó²åÈëgbkÖÐÎÄ£¬Ôٲ鿴£¬½á¹ûÏÔʾµÄ¾ÍÊÇgbkÖÐÎÄ£»´æÈëutf-8ÖÐÎÄ£¬select³öÀ´¾ÍÊÇutf-8ÖÐÎÄ¡£Äã´æ½øÈ¥µÄÊÇʲô±àÂ룬select³öÀ´µÄ¾Í»¹ÊÇʲô±àÂë¡£ËùÒÔSqlite3Ö§³ÖgbkÊÇûÓÐÈκÎÎÊÌâµÄ¡£ > > > ¶øDjangoÄØ£¬ËäÈ»Ëü½¨Òé³õѧÕßʹÓÃutf-8£¬µ«ËüÈÔÈ»±£ÁôÁËÐ޸ıàÂ뷽ʽµÄ½Ó¿Ú£¬Ö»²»¹ýÕâ¸ö½Ó¿ÚÓе㲻³¹µ×¡£ÔÚglobal_settings.pyÎļþÖУ¬ÓÐÒ»ÐУº > > DEFAULT_CHARSET = 'utf-8' > > ˵Ã÷djangoÖÐĬÈϵıàÂ뷽ʽÊÇutf-8£¬Èç¹ûҪʹÓÃgbk£¬ºÜ¼òµ¥£¬ÔÚ×Ô¼ºµÄProjectĿ¼ÏµÄsettings.pyÖмÓÈ룺 > > DEFAULT_CHARSET = 'gbk' > > ¾ÍÐУ¬ÒòΪsettings.pyÖеÄÉèÖûḲ¸Çglobal_settings.pyÖеġ£ > > > ¿ÉÊÇ£¬µ¥µ¥¸ÄÕâÒ»¸öµØ·½»¹²»¹»£¬»¹ÓÐÒ»¸öµØ·½±ØÐë¸Ä£¬·ñÔò»á³öÏÖOperationalError: > Could not decode to UTF-8 column > > ...´íÎó¡£ÕâÊÇÒòΪdjangoĬÈÏΪ´Ósqlite3·µ»ØµÄÒ»¶¨ÊÇutf-8±àÂëµÄÄÚÈÝ£¬Èç¹û·µ»ØµÄÊÇgbk£¬¾Í»á±¨´í¡£Òª¾ÀÕýÕâÒ»Îó»áÒ²ºÜ¼òµ¥£¬ÐèÒªÔÚdjanggo\db\backends\sqlite3\base.pyÖÐÔÚ59ÐÐǰ²åÈ룺 > > self.connection.text_factory = str > > ͬʱ½«64ÐÐ×¢Ê͵ô£º > > #cursor.row_factory = utf8rowFactory > > ÖÁÓÚtext_factoryºÍrow_factoryÊÇʲôº¬Ò壬ÔÚPythonµÄDocumentsÖÐÓУ¬Çë×Բ顣 > > Íê³ÉÕâÁ½¸ö²½ÖèÒԺ󣬹§Ï²Ä㣬ÏÖÔÚµÄDjango+Sqlite3ÒѾ¿ÉÒÔÖ§³ÖgbkÁË£¬²»ÖªÄã¸Ð¾õÔõôÑù£¿ > > ·´ÕýÎÒÊǾõµÃºÜˬ¡£ > > > > > > --- Ben Luo <benluo在gmail.com>дµÀ: > > > On Nov 25, 2007 9:15 PM, Shao Feng > > <sevenever在gmail.com> wrote: > > > > > > > > > > > On Nov 25, 2007 10:18 AM, limodou > > <limodou在gmail.com> wrote: > > > > > > > On Nov 25, 2007 12:23 AM, Shao Feng > > <sevenever在gmail.com> wrote: > > > > > -----BEGIN PGP SIGNED MESSAGE----- > > > > > Hash: SHA1 > > > > > > > > > > ´ó¼ÒºÃ£º > > > > > ÎÒ³õѧdjango,¸ú×ÅlimodouµÄDjango step by > > stepѧ¡£ > > > > > ÎÒÔÚÒ»¸öÎļþ¿ªÍ·ÉùÃ÷ÁË -*- coding:gbk > > -*-£¬ > > È»ºó±£´æÎªgbk±àÂ룬µ«ÊÇÔÚä¯ÀÀµÄÒ³ÃæÀï³öÏÖÁËÂÒÂë¡£ > > > > > Èç¹û°Ñä¯ÀÀÆ÷ ²é¿´-->×Ö·û±àÂë Ñ¡Ôñ > > ÖÐÎÄgbk,¾ÍÄÜÕý³£ÏÔʾÁË¡£ > > > > > > > > > µ±È»²»Ò»¶¨£¬µ«ÊÇҪͳһ¡£ > > > > > > > > > > limodouǰ±²ËµµÄͳһÊÇÄÄЩ¶«Î÷Ҫͳһ°¡£¿ÊÇ˵Îļþ¿ªÍ·ÉùÃ÷µÄ±àÂëºÍʵ¼ÊÎļþ±àÂëҪͳһÂ𣿻¹ÊÇËùÓеÄpyÎļþ¶¼ÒªÍ³Ò»±àÂ룿 > > > > > > > > > > Django×îÖÕÊÇÏÔʾΪhtmlÒ³Ãæ¡£ÄãÖ»Òª±£Ö¤×îÖÕÏÔʾµÄÒ³Ãæ¸ñʽÊÇͳһµÄÓ¦¸Ã¾Í¿ÉÒÔÁ˰ɡ£²»¹ýΪÁËÈÃÊÂÇé¼òµ¥£¬Äã¿ÉÒÔËùÓеͼ°´utf-8À´±àÂë¡£ > > > _______________________________________________ > > 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 > > > > ___________________________________________________________ > ½øÈëÑÅ»¢ÓÎÏ·¼ÎÄ껪£¬Ó®È¡Òº¾§ÏÔʾÆ÷£¡ > http://cn.mail.yahoo.com/promo/carnival07/ > _______________________________________________ > 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/20071202/009b3c3b/attachment.html
Zeuux © 2025
京ICP备05028076号