1
omg21 OP 网站编码的确是 utf-8 ,因为我在后台发布带有“•”字符的信息也能正常显示,但是用上传操作的时候用 bt = bt.encode('gbk')就会报错
|
2
omg21 OP 刚才从数据库里取出来字符串再做个测试,结果也是 utf-8 。
|
3
flniu 2017-03-17 22:16:05 +08:00
首先明确两个概念:
* 字符串(string),在 Python 3 中是 'abc' 或 str() * 字节流(binary),在 Python 3 中是 b'abc' 或 bytes() 然后记清: * str.encode() -> bytes * bytes.decode() -> str urlopen().read() 返回 bytes 你的 encoding 函数是通过 try 的方式找到正确的编码,然后 decode 成 str 同时返回对应编码名 把 str 值存入数据库时,要看数据库对应字段数据类型,一般 driver 会自动处理。建议选择支持 Unicode 存储的数据类型。 你可以在数据库里查看存储的字符串值对不对。 最后就是从数据库里读出字符串在网站显示,一般网站框架会自动处理。 |
4
omg21 OP @flniu 刚才从数据库里取出字符串用 encoding 做了个测试,全都是 utf-8 ,话说应该是 unicode 才对啊。
既然数据库中的是 utf-8 ,那上传时不需要再转码啊 |
5
PythonAnswer 2017-03-17 22:57:36 +08:00
全程 utf8 ,我用 py3 后就没出现过编码问题了。
|
6
flniu 2017-03-17 23:00:36 +08:00
htmlstr, htmltype = encoding(htmlstr)
这句执行完, type(htmlstr) 应该是 str 你从数据库取出来后, type 是什么? 另外你的 encoding 函数,如果 4 种情况都出错,会走 pass ,不 return 结果。 |
7
flniu 2017-03-17 23:01:52 +08:00
识别字符编码可以考虑用 cchardet 。
单机数据库选 sqlite 比 access 好,除非有特殊需要。 |
8
omg21 OP @flniu 你从数据库取出来后, type 是什么?
这里的 type 就是 utf-8 ,数据库连接我用的 pypyodbc ,好像也没找到有需要设置编码的地方。 |
10
bxb100 2017-03-17 23:40:10 +08:00 via Android
py IO 显示是 unicode 吧
|
11
carlonelong 2017-03-19 10:37:30 +08:00
存储是用 UTF-8 ,显示是根据你终端的编码来的吧
decode 的参数是现在的类型,都是转成 unicode 感觉最好还是用 py3 , py2 编码太坑了 |
12
weyou 2017-03-20 18:54:37 +08:00
这段代码有点意思, decode 函数怎么会知道你输入的字串的编码? 如果这个字串的某些字符不再这个编码的范围内, decode 才会报错啊。 不同的 code page 都是可能有相同的编码的啊。换言之, 就算用了错误的 encoding type , decode 函数还是有可能不会报错的, 只是得到的字符串并不是你期望得到的。
|