在进行CRNN训练中文字体OCR时,楼主碰到了令人头疼的问题,中英文编码不同。
这边文章主要来讲一下“utf-8”与“gbk”的一些问题,有人或许会问不是还有一个unicode吗?看完下面一张图就知道啦。
unicode其实是一种在操作过程中存在的字符状态,一般来讲,例如python中的str都是以“unicode”编码,在进行操作时会具化成为“utf-8”与“gbk”,往往是前者居多。
如上图所示,在python中不同编码的转换都要经过Unicode,不论是UTF-8或者是GBK,整个过程都是先通过编码decode转换为Unicode告诉Unicode当前的编码格式是什么、然后再通过解码encode转换为自己想要实现的编码格式或类型。
看下下面的命令,会清楚很多。
s = '你好'
# str类型,默认编码为unicode
print(s.encode("gbk"))
# Unicode转gbk
# 输出为:b'\xc4\xe3\xba\xc3'
s = s.encode("gbk")
# 将gbk的s编码赋给s
print(s)
# 显然输出为: b'\xc4\xe3\xba\xc3'
print(len(s))
# 输出长度为 **4**
print(s.decode('gbk').encode("utf-8"))
# Unicode转utf-8
#输出为: b'\xe4\xbd\xa0\xe5\xa5\xbd'
#在这条语句中,由于先前s已经变成了gbk编码,所以得先解码变成unicode,再进行编码,否则报错
s = s.decode('gbk').encode("utf-8")
print(s)
#显然输出为: b'\xe4\xbd\xa0\xe5\xa5\xbd