python判断一个字符是否是xml合法字符
2012-05-08 17:08
597 查看
项目中碰到的问题,记录如下,期望能对他人有用。
考虑对于其他非法xml字符通过base64加密处理,具体代码如下:
def valid_XML_char_ordinal(c): """ @summary: check if the char is a valid xml character @param c: the character to be checked @see: # http://www.w3.org/TR/2008/REC-xml-20081126/#charsets @result: True/False """ return ( # conditions ordered by presumed frequency 0x20 <= c <= 0xD7FF or c in (0x09, 0x0A, 0x0D) or 0xE000 <= c <= 0xFFFD or 0x10000 <= c <= 0x10FFFF )
考虑对于其他非法xml字符通过base64加密处理,具体代码如下:
try: import xml.sax.saxutils except ImportError: raise ImportError("requires xml.sax.saxutils package, pleas check if xml.sax.saxutils is installed!") import base64 import logging logger = logging.getLogger(__name__) __all__ = ["escape", "unescape"] def escape(data): """ @summary: Escape '&', '<', and '>' in a string of data. if the data is not ascii, then encode in base64 @param data: the data to be processed @return {"base64": True | False, "data": data} """ # check if all of the data is in ascii code is_base64 = False escaped_data = "" try: #data.decode("ascii") if data is None: data = "" is_base64 = False for c in data: if not valid_XML_char_ordinal(c): is_base64 = True break # check if need base64 encode if is_base64: logger.debug("%s is not ascii-encoded string, so i will encode it in base64") # base64 encode escaped_data = base64.b64encode(data) else: # check if the data should be escaped to be stored in xml escaped_data = xml.sax.saxutils.escape(data) except Exception, e: logger.excpetion(e) return {"base64": is_base64, "data": escaped_data} def unescape(data, is_base64 = False): """ @summary: Unescape '&', '<', and '>' in a string of data. if base64 is True, then base64 decode will be processed first @param data: the data to be processed @param base64: specify if the data is encoded by base64 @result: unescaped data """ # check if base64 unescaped_data = data if is_base64: try: unescaped_data = base64.b64decode(data) except Exception, ex: logger.debug("some excpetion occured when invoke b64decode") logger.error(ex) print ex else: # unescape it unescaped_data = xml.sax.saxutils.unescape(data) return unescaped_data
相关文章推荐
- python 判断一个IP地址是否合法
- 【Python】判断一个字符串是否是合法IP地址
- python判断是否可以只插一个字符,让字符串变成回文,返回true/false
- python实现判断一个字符串是否是合法IP地址的示例
- python实现判断一个字符串是否是合法IP地址
- 通过JS,Jquery判断某个字符在一个字符串中是否存在的方法
- java 判断一个字符串是否包含某个字符
- 判断一个字符串是否是合法的JSON字符串
- 43.编写一个程序,判断用户输入的字符是否是数字,若是数字,则输出“a numerical character”
- python判断一个集合是否包含了另外一个集合中所有项的方法
- 在java中判断一个字符串中是否包含某个字符或字符串
- 编写正则表达式,判断给定的是否是一个合法的IP地址。
- 【c语言】 输入一个字符,判断它是否为大写字母,如果是,将它转换成小写字母,如果不是不转换
- 判断一个序列是否是栈的合法序列
- 判断一个字符串里是否包含另一个字符串所有的字符
- Python 判断一个字符串是否是数字
- 判断一个域名是否合法
- c# 判断一个字符串列表中是否已经包括指定字符
- python 判断一个进程是否存在
- 判断一个字符串中的字符是否唯一