文档章节

关于&#dddd; 这种字符编码 如何解码

S
 StSphinx
发布于 2016/05/14 01:17
字数 476
阅读 543
收藏 0

        继续写爬虫ing,又踩坑里了。。。。一个网页,里面的部分中文是正面这个样子的:

已转出

看完后我的内心是近乎崩溃的。。。

        生活不易,还得继续。查了 百度,google都没有好的答案,偶然间发现了知乎上有关讲解:

http://www.zhihu.com/question/21390312

形如——
&#dddd;
&#xhhhh;
&#name;
——的一串字符是 HTML、XML 等 SGML 类语言的转义序列(escape sequence)。它们不是「编码」。

以 HTML 为例,这三种转义序列都称作 character reference:
前两种是 numeric character reference(NCR),数字取值为目标字符的 Unicode code point;以「&#」开头的后接十进制数字,以「&#x」开头的后接十六进制数字。
后一种是 character entity reference,后接预先定义的 entity 名称,而 entity 声明了自身指代的字符。
从 HTML 4 开始,NCR 以 Unicode 为准,与文档编码无关。

「中国」二字分别是 Unicode 字符 U+4E2D 和 U+56FD,十六进制表示的 code point 数值「4E2D」和「56FD」就是十进制的「20013」和「22269」。所以——
中国
中国
——这两种 NCR 写法都会在显示时转换为「中国」二字。

作者:梁海
链接:http://www.zhihu.com/question/21390312/answer/18091465
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

        说白了就是unicode编码的十进制表示,再加上一些点缀("&#"与";")。所以呢,知道了原理就好办多了。 无非就是把十进制转换为十六进制。用python写了个转换方法如下:

def ncr_to_unicode(text):
    """
    用于将北京这类NCR(numeric character reference)字符串转换为unicode串
    :param text: NCR strings such as "已转出"
    :return: unicode strings such as "\u5df2\u8f6c\u51fa"
    usage: print print unicode(ncr_to_unicode(code), 'unicode-escape')
    """
    l_text_unicode = []
    l_word = text[:-1].split(';')
    for word in l_word:
        word = word[2:]
        word_hex = hex(int(word))
        word_uni = '\u' + word_hex[2:]
        l_text_unicode.append(word_uni)
    return ''.join(l_text_unicode)

 

© 著作权归作者所有

S
粉丝 0
博文 18
码字总数 8025
作品 0
东城
私信 提问
加载中

评论(0)

Python 字符编码问题

python对多国语言的处理是支持的很好的,它可以处理现在任意编码的字符,这里深入的研究一下python对多种不同语言的处理。 有一点需要清楚的是,当python要做编码转换的时候,会借助于内部的...

wangxuwei
2016/09/30
20
0
Python字符编码问题

python对多国语言的处理是支持的很好的,它可以处理现在任意编码的字符,这里深入的研究一下python对多种不同语言的处理。 有一点需要清楚的是,当python要做编码转换的时候,会借助于内部的...

有些服务器
2015/12/03
72
0
JS对RUL解码 JS将PHP中urlencode编码的字符串解码

做项目,需要用JS接收PHP用urlencode编码过来的数据。 但JS的编码、解码方法里,decodeURI和PHP的urlencode方法不同,无法对PHP的urlencode进行解码。上网搜了搜,发现许多人问这个问题,解决...

bengozhong
2015/11/17
124
0
java web 开发 编码问题详解

java web 开发 编码问题详解 浏览器 IE/FireFox -------——---->Servlet容器--------——---------------->显示页面 编码 使用容器的URIEncoding解码/request解码,再编码发出响应 解码 一、...

q5725827
2013/06/09
0
0
深入分析Java中的中文编码问题

编码问题一直困扰着开发人员,尤其在 Java 中更加明显,因为 Java 是跨平台语言,不同平台之间编码之间的切换较多。本文将向你详细介绍 Java 中编码问题出现的根本原因,你将了解到:Java 中...

lvzjane
2012/11/29
467
2

没有更多内容

加载失败,请刷新页面

加载更多

【 开发指南 】智能家居技能

本文作者:DuerOs 目录 一、教学视频 二、整体架构 三、开发步骤&资料整理 四、常见问题解答 五、智能家居文档 树状提纲 ————————————————————————————————...

百度开发者中心
2019/03/29
23
0
008. 并发容器类 Map

1. JDK 源码学习方法 1. 演绎推导法 示例:因果推理。 因为 JAVA 中只提供了 BIO 和 NIO 两种方式,所以一切框架中,涉及到网络处理的,都可以用这两个知识点去探究原理。 2. 归纳总结法 示例...

紫穹
今天
75
0
如何使用sed替换换行符(\\ n)? - How can I replace a newline (\n) using sed?

问题: How can I replace a newline (" \\n ") with a space (" 如何将换行符(“ \\n ”)替换为空格(“ ") using the sed command? “)使用sed命令? I unsuccessfully tried: 我尝试失......

javail
今天
109
0
OSChina 周一乱弹 —— 原来这叫分别焦虑

Osc乱弹歌单(2020)请戳(这里) 【今日歌曲】 @薛定谔的兄弟 :分享洛神有语创建的歌单「我喜欢的音乐」: 《A Careful Tearing》- Levi Patel 手机党少年们想听歌,请使劲儿戳(这里) 清明...

小小编辑
今天
182
0
trim、stripslashes、htmlspecialchars函数

通过 PHP 验证表单数据 我们要做的第一件事是通过 PHP 的 htmlspecialchars() 函数传递所有变量。 在我们使用 htmlspecialchars() 函数后,如果用户试图在文本字段中提交以下内容: <script>...

imzchloe
今天
130
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部