Protobuf中少见的八进制编码.md

问题

最近使用protobuf(google出品的一种序列化协议)存储中文时,看到一种类似\346\200\241\346\200\241\346\200的编码,试用各种常用的编码格式用编码转换工具都不可以,在java,python中却可以在不明确指定编码方式的情况下识别成功,现在需要在web页解码方便直接查看,js默认的解编码函数搞不定。所以查查看

八进制编码

其实他还是utf8编码,不过通常的utf8编码使用16进制表示,这种编码不常见的使用了8进制表示。其实将这里的8进制转为16进制,和utf8的编码是完全一致的,也就是说在内存中的字节是一致的,所以可以被java,python直接识别,但是按8进制方式显示,就显得很特别了。

# 在python中可以直接用decode("utf-8")解:
>>> print("\344\275\240\345\245\275".decode("utf-8"))
你好

utf8的多种形式

"你好"的各个平台编码,他们之间的区别就是编码的二进制的不同的可读方式,八进制确实用的少。

平台 举例 备注
在线转码平台 你好 就是把unicode的 \u 前缀转为了 &#x
python \xe4\xb8\xad\xe6\x96\x87 就是utf8 每个字节16进制的前面加上 \x
url %E4%BD%A0%E5%A5%BD utf8 每个字节16进制的前面加上 %
protoBuf \344\275\240\345\245\275 utf8 每个字节8进制的前面加上 \

js实现 八进制utf8的解码

没有成品,就自己造。思路就是正则匹配字符串,三位三位拿,转为16进制,加%转为url的编码方式,然后使用js的解码函数decodeURIComponent() 解码最终得到中文。

function decodeOctUtf8(octStr){
    decoded = octStr.replace(/(\\\d\d\d){3,}/g, function(word){
        tokens = word.split("\\")
        encoded = ''   
        tokens.forEach(function(token, idx){
            if(token.length > 0){  // 去掉split函数产生的空字符串
                encoded += "%" + parseInt(token, 8).toString(16)
            }
        })
        return decodeURIComponent(encoded);
    });
    return decoded
}

总结

至此问题解决了。代码离不开编码的处理,常用有很多种编码方式,编码的核心作用就是把文字映射到二进制,方便机器理解计算。在读写文件,web传输时常常需要指定编码方式,但我们也不需要关注编码的"长相",因此碰见一个不常见的“长相”,还以为是不常用或者经过了压缩的编码。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,324评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,356评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,328评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,147评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,160评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,115评论 1 296
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,025评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,867评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,307评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,528评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,688评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,409评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,001评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,657评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,811评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,685评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,573评论 2 353

推荐阅读更多精彩内容