Python论坛  - 讨论区

标题:[python-chinese] SQLObject中的编码bug?

2006年09月20日 星期三 11:55

gashero harry.python在gmail.com
星期三 九月 20 11:55:48 HKT 2006

最近用SQLObject做项目,使用了UnicodeCol做存储中文用。后来发现使用了几种编码最终都无法存入信息。于是上网参考了一下,看了《SQLObject
的中文编码问题及解决方案》。不过很可惜,在我的ActivePython
2.4.3中并没有这个问题。于是最后郁闷的看TraceBack。发现一个奇怪的事实。代码如下,在col.py中(483-499行)。

class StringValidator(validators.Validator):

    def to_python(self, value, state):
        if value is None:
            return None
        if isinstance(value, unicode):
           return value.encode("ascii")
        return value

    def from_python(self, value, state):
        if value is None:
            return None
        if isinstance(value, str):
            return value
        if isinstance(value, unicode):
            return value.encode("ascii")
        return value

SQLObject在内部做了字符串的数据有效性验证,却在验证之后的返回时加了ASCII编码。所以无论输入的是Unicode、UTF-8、GBK编码,只要不是ASCII编码的一律出错。

真不知作者是什么目的。大家讨论一下吧。有这个东西的存在肯定要在使用非ASCII编码时出错的。我试着删除了489和498行的.encode("ascii")语句,所有的都正常了。

我用的版本是SQLObject-0.7rc1-py2.4.egg。

-- 
从前有一只很冷的毛毛虫,他想获得一点温暖。而获得温暖的机会只有从树上掉下来,落进别人的领口。
片刻的温暖,之后便失去生命。而很多同类却连这片刻的温暖都没有得到就..
我会得到温暖么?小心翼翼的尝试,却还是会受到伤害。
我愿为那一刻的温暖去拼,可是谁愿意接受?

欢迎访问偶的博客:
http://blog.csdn.net/gashero

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年09月20日 星期三 12:01

limodou limodou在gmail.com
星期三 九月 20 12:01:23 HKT 2006

On 9/20/06, gashero <harry.python在gmail.com> wrote:
> 最近用SQLObject做项目,使用了UnicodeCol做存储中文用。后来发现使用了几种编码最终都无法存入信息。于是上网参考了一下,看了《SQLObject
> 的中文编码问题及解决方案》。不过很可惜,在我的ActivePython
> 2.4.3中并没有这个问题。于是最后郁闷的看TraceBack。发现一个奇怪的事实。代码如下,在col.py中(483-499行)。
>
> class StringValidator(validators.Validator):
>
>     def to_python(self, value, state):
>         if value is None:
>             return None
>         if isinstance(value, unicode):
>            return value.encode("ascii")
>         return value
>
>     def from_python(self, value, state):
>         if value is None:
>             return None
>         if isinstance(value, str):
>             return value
>         if isinstance(value, unicode):
>             return value.encode("ascii")
>         return value
>
> SQLObject在内部做了字符串的数据有效性验证,却在验证之后的返回时加了ASCII编码。所以无论输入的是Unicode、UTF-8、GBK编码,只要不是ASCII编码的一律出错。
>
> 真不知作者是什么目的。大家讨论一下吧。有这个东西的存在肯定要在使用非ASCII编码时出错的。我试着删除了489和498行的.encode("ascii")语句,所有的都正常了。
>
> 我用的版本是SQLObject-0.7rc1-py2.4.egg。
>
不用SQLObject,也许是一个bug吧。

-- 
I like python!
My Blog: http://www.donews.net/limodou
UliPad Site: http://wiki.woodpecker.org.cn/moin/UliPad
UliPad Maillist: http://groups.google.com/group/ulipad

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年09月20日 星期三 14:31

Bruce Wang number5在gmail.com
星期三 九月 20 14:31:25 HKT 2006

:ÛOôêX¦¡Ú.–)¨v‹ ™¨¥r‰°®‹^:ÛOôꬅê腪ëʜ­†‰à™¨¥r‰°®‹^IÎn7œµIâr‡^
‰R@³›ç-Ëb½ãò¶'ۍӭ§§$r‰iˏ7ãß\•«,JÚâžZ–'Z¶ŠïjXjÚ+±V¥‰Ö­¢·^~Ú)ÊØhžÇ¥~ö¥¹ë-j×¢~ö¥¹è¬6‰Þ­ën®shèŸŠÈ§²Ö§qëږ箞'(uêÞ¶ê罩nyéܡך±È¢­ën®{ږçy÷ë¢jr¶'±é_½©nzËZµèŸ½©nz+
¢w«zÛ«œÚ'z'â²)쵩Üzö¥¹ë-®·­º¹ïj[ž‰ø¬Š{-jw½©nzéâr‡^­ën®{ږ瞝Êy«Š*Þ¶ê罩ny$9¸ÞrЂž'(uåÁ(‚ €‚8óÞ=ñéܡך±È¢IÎn7œ·NësZrۇ $9¸ÞrÖî‚m§ÿðÃ(¢	^r‰¿±æ«r

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年09月20日 星期三 15:20

ygao ygao2004在gmail.com
星期三 九月 20 15:20:57 HKT 2006

老外写的程序,一般来说都有这个毛病。

On 9/20/06, Bruce Wang <number5在gmail.com> wrote:
>
>
> On 9/20/06, limodou <limodou在gmail.com> wrote:
> > On 9/20/06, gashero <harry.python在gmail.com> wrote:
> > >
> 最近用SQLObject做项目,使用了UnicodeCol做存储中文用。后来发现使用了几种编码最终都无法存入信息。于是上网参考了一下,看了《SQLObject
> > > 的中文编码问题及解决方案》。不过很可惜,在我的ActivePython
> > >
> 2.4.3中并没有这个问题。于是最后郁闷的看TraceBack。发现一个奇怪的事实。代码如下,在col.py中(483-499行)。
> > >
> > > class StringValidator(validators.Validator):
> > >
> > >     def to_python(self, value, state):
> > >         if value is None:
> > >             return None
> > >         if isinstance(value, unicode):
> > >            return value.encode("ascii")
> > >         return value
> > >
> > >     def from_python(self, value, state):
> > >         if value is None:
> > >             return None
> > >         if isinstance(value, str):
> > >             return value
> > >         if isinstance(value, unicode):
> > >             return value.encode ("ascii")
> > >         return value
> > >
> > >
> SQLObject在内部做了字符串的数据有效性验证,却在验证之后的返回时加了ASCII编码。所以无论输入的是Unicode、UTF-8、GBK编码,只要不是ASCII编码的一律出错。
> > >
> > >
> 真不知作者是什么目的。大家讨论一下吧。有这个东西的存在肯定要在使用非ASCII编码时出错的。我试着删除了489和498行的.encode
> ("ascii")语句,所有的都正常了。
> > >
> > > 我用的版本是SQLObject-0.7rc1-py2.4.egg。
> > >
> > 不用SQLObject,也许是一个bug吧。
> >
> >
>
> http://www.google.com/search?q=return+value.encode%28%22ascii%22%29+sqlobject+StringValidator
> 看来是个很严重的bug
>
> --
> simple is good
> http://brucewang.net
> _______________________________________________
> 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
>


-- 
※※※※※※※※※※※※※※※※※※※※※※※※
My blog:  http://blog.donews.com/ygao
 Forum    http://groups.google.com/group/python_study
※※※※※※※※※※※※※※※※※※※※※※※※

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2025

    京ICP备05028076号