GBK与GB2312的些许不同
也许大家已经看惯了书上说的GBK是对GB2312的扩充,就是说,GB2312字符集中的所有字符都可以在GBK字符集中找到。(by gashero)可是最近在一次调试Python爬虫的过程中就发现了一些字符的不同。同时大家也应该注意一些网页的默认编码字符集了。
当时正在分析的一个网页的默认编码字符集是GB2312,其中含有一个符号"·",这个常作为项目符号。在使用GB2312进行解码时,得到的unicode字符是/u30fb,然后使用系统默认编码GBK进行打印时就提示了编码错误。即字符串"/xa1/xa4"无法使用GB2312解码为unicode字符后再编码为GBK编码显示。(by gashero)实际测试中只要不会交换编码,那么使用同一种编码进行编码和解码就不会出问题。
后来查找得知,字符/u30fb是一种特殊的unicode字符,是一种不允许显示的字符,所以在GBK编码中就没有它的位置(by gashero)。而字符串"/xa1/xa4"使用GBK解码时得到的是/u00b7。
至此得知,虽然网页的默认编码是GB2312,但是实际上使用的是GBK编码,也使用了一些在GB2312和GBK之间不同的编码字符。所以也就导致了这个错误。
建议以后编程序的时候,遇到默认编码为GB2312的大可以直接使用GBK进行解码为unicode字符串。