在处理UTF8字符时,如何检查vobject字符串是否有效vcard?

2024-10-05 11:25:29 发布

您现在位置:Python中文网/ 问答频道 /正文

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

try-and-catch是否有其他方法或generall方法?在

目前我的做法如下:

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

如何使用VOBJECT处理unicode?


Tags: and方法字符串asexceptionerrorvcardvobject
2条回答

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

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的子类,因此以下代码就足够了:

^{pr2}$
 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.-示例如下:

^{pr2}$

相关问题 更多 >

    热门问题