#问题描述

在使用golang的日志系统时,有时会出现一些看起来知道是什么编码但实际上解析不出来的内容:

1
\350\277\231\346\230\257\344\270\200\346\256\265\344\270\255\346\226\207

找了好久终于知道怎么读了~

#太长不看版

直接用python2print方法即可:

1
2
3
4
5
6
7
8
9
10
11
12
13
➜  ~  python2                                               [2021/09/08 23:11] 

WARNING: Python 2.7 is not recommended.
This version is included in macOS for compatibility with legacy software.
Future versions of macOS will not include Python 2.7.
Instead, it is recommended that you transition to using 'python3' from within Terminal.

Python 2.7.16 (default, Jun 18 2021, 03:23:52)
[GCC Apple LLVM 12.0.5 (clang-1205.0.19.59.6) [+internal-os, ptrauth-isa=deploy on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> print("\350\277\231\346\230\257\344\270\200\346\256\265\344\270\255\346\226\207")
这是一段中文
>>>

#转换

理论上我们常用的编码类型无非就是gbkasciiutf-8

直接从utf-8开始(因为我阴差阳错试出来了编码,所以我直接逆向推回去了):

1
2
>>> "这是一段中文".encode('utf-8')
b'\xe8\xbf\x99\xe6\x98\xaf\xe4\xb8\x80\xe6\xae\xb5\xe4\xb8\xad\xe6\x96\x87'

其实可以发现\的个数是一样的,因此就是\350\xe8之间有一个对应关系。

基本上到这里就可以猜测一个是八进制一个是十六进制了= =

1
2
>>> hex(int("350",8))
'0xe8'

收工。

有时候运气也很重要。

我用了chardet库:

1
2
3
4
5
6
7
Python 2.7.17 (default, Jul 20 2020, 15:37:01) 
[GCC 7.5.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> import chardet
>>> chardet.detect("\350\277\231\346\230\257\344\270\200\346\256\265\344\270\255\346\226\207")
{'confidence': 0.99, 'language': '', 'encoding': 'utf-8'}

晚安 😴