首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在处理UTF-8字符时,如何使用vobject检查字符串是否有效?

在处理UTF-8字符时,如何使用vobject检查字符串是否有效?
EN

Stack Overflow用户
提问于 2014-04-08 12:15:49
回答 2查看 300关注 0票数 0

如何使用vobject检查字符串是否有效?

是否有一些额外的方法或一般的方法尝试和捕捉?

就目前而言,我这样做如下:

代码语言:javascript
复制
 try:
            vobj = vobject.readOne(vcard_readable)
 except Exception as e:
            error_message = {
                "valid": False,
                "reason": "Invalid vCard\n{0}".format(e)}

如何用VOBJECT?处理unicode

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-08 12:59:44

当前代码运行良好,但通常不希望捕获Exception,因为这将掩盖代码中的其他错误。例如,如果我将您的代码片段放到一个文件中,然后运行它……我不会收到错误消息,即使我没有导入vobject模块。这是因为这段代码实际上引发了一个NameError

代码语言:javascript
复制
Traceback (most recent call last):
  File "foo.py", line 2, in <module>
    vobj = vobject.readOne(vcard_readable)
NameError: name 'vobject' is not defined

但是因为你抓住了所有的例外,所以你隐藏了它。一种更好的技术是只捕获您期望从vobject模块收到的特定异常,并让其他人正常地渗出。

对于vobject,它引发的所有异常都将是vobject.base.VObjectError的子类,因此下面的代码就足够了:

代码语言:javascript
复制
 try:
            vobj = vobject.readOne(vcard_readable)
 except vobject.base.VObjectError as e:
            error_message = {
                "valid": False,
                "reason": "Invalid vCard\n{0}".format(e)}
票数 2
EN

Stack Overflow用户

发布于 2014-04-08 16:42:22

代码语言:javascript
复制
 vcard = put.get('vcard')
            try:
                vcard_readable = base64.decodestring(vcard)
                quoted_printable_vcard = quopri.encodestring(vcard_readable)
                vobj = vobject.readOne(quoted_printable_vcard)
            except UnicodeEncodeError as e:  # case of bad encoding
                error_message = {
                    "valid": False,
                    "reason": "Invalid vCard\n{0}".format(e)}
                return HttpResponse(json.dumps(error_message), status=200)
            except vobject.base.VObjectError as e2:  # case of invalid vcard
                error_message = {
                    "valid": False,
                    "reason": "Invalid vCard format\n{0}".format(e2)}
                return HttpResponse(json.dumps(error_message), status=200)
            except:
                error_message = {
                    "valid": False,
                    "reason": "Invalid vCard."}
                return HttpResponse(json.dumps(error_message), status=200)

好的。我解决了。要使vobject与UNICODE (UTF-8)一起工作,需要使用:

quoted printable encoding. -下面的例子:

代码语言:javascript
复制
>>> s = "gżegżółka"
>>> s
'g\xc5\xbceg\xc5\xbc\xc3\xb3\xc5\x82ka'
>>> import quopri
>>> quopri.encodestring(s)
'g=C5=BCeg=C5=BC=C3=B3=C5=82ka'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22936720

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档