关于编码的疑惑
本帖最后由 123Marchapril 于 2021-5-10 22:01 编辑小甲鱼视频里说Python用的是Unicode的形式
在‘Python编码问题的结局方案’里说Python用的是utf-8形式
一:到底是用的哪种形式呢?我只知道Unicode是字符集,utf-8是一种编码形式,我觉得Python可以用Unicode这个大的集合,但是什么编码形式总得有默认的吧!
这两者怎么理解呢?这里很疑惑
二:如果Python用的是utf-8形式,那么在小甲鱼视频第54讲中,为什么data = urllib.parse.urlencode(data)不可以,必须得是data = urllib.parse.urlencode(data).encode('utf-8')?既然默认编码就是utf-8了,再编码成为utf-8不是多此一举吗?为什么这样写呢?
三:还有一个疑惑是,我怎么知道某个字符串是不是json格式呢?非常感谢!
import urllib.request
import urllib.parse
importjson
while True:
content = input('请输入需要翻译的:')
if content == 'stop'or content == '再见':
print('再见')
break
data = {}
data['i']= content
data['doctype']= 'json'
data = urllib.parse.urlencode(data)
url = 'https://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
response = urllib.request.urlopen(url,data)
html = response.read().decode('utf-8')
d = json.loads(html)
print('翻译结果: %s'% (d['translateResult']['tgt']))
为什么是审核中呀{:10_266:} python的默认编码是Unicode
在‘Python编码问题的结局方案’里说Python用的是utf-8形式 -->不知道你在哪看的我没听过
怎么知道字符串是不是 json 格式的问题,一般我会选择用眼睛看{:10_258:} yuxijian2020 发表于 2021-5-11 08:47
python的默认编码是Unicode
在‘Python编码问题的结局方案’里说Python用的是utf-8形式 -->不知道你在哪 ...
小甲鱼亲自写的帖子说的:
使用 Python3,因为 Python3 默认使用 UTF-8 编码。
帖子地址:https://fishc.com.cn/forum.php?mod=viewthread&tid=56452&highlight=Python%B1%E0%C2%EB 本帖最后由 123Marchapril 于 2021-5-11 08:55 编辑
123Marchapril 发表于 2021-5-11 08:53
小甲鱼亲自写的帖子说的:
使用 Python3,因为 Python3 默认使用 UTF-8 编码。
帖子地址:https://fish ...
json格式用眼睛看哪里呀?我感觉跟字符串差不多{:10_282:}
我的意思是看哪里可以知道返回的是JSON格式呀? 那你为什么不再往下看几行呢?
延伸知识:
1. 可以用以下方法获得当前的默认编码:
>>> import sys
>>> sys.getdefaultencoding()
'ascii'
yuxijian2020 发表于 2021-5-11 08:55
那你为什么不再往下看几行呢?
延伸知识:
所以我就觉得很乱,用sys.getdefaultencoding()的返回为什么不是Unicode呢? 123Marchapril 发表于 2021-5-11 08:57
所以我就觉得很乱,用sys.getdefaultencoding()的返回为什么不是Unicode呢?
等我研究下,不过 utf-8 也是 Unicode 的一种扩展 yuxijian2020 发表于 2021-5-11 08:59
等我研究下,不过 utf-8 也是 Unicode 的一种扩展
我知道Unicode是字符集utf-8是一种编码形式,还有什么utf-16,utf-32,我的意思是Python自己得确定是哪种编码形式吧? 我找到了这玩意
我懂了,python3 就是 utf-8
所谓 Unicode 也是 utf-8
但是,根据系统不同,python 还会根据系统选择不同的默认编码 给你一个查看字符串编码的方法吧
import chardet
s = "aaaaa"
print(chardet.detect(str.encode(s)))
我是win7,输出为
{'encoding': 'ascii', 'confidence': 1.0, 'language': ''} yuxijian2020 发表于 2021-5-11 09:18
给你一个查看字符串编码的方法吧
还有一个问题是我看服务器返回的JSON格式和文本格式没啥区别,我从哪里可以看到是JSON格式呢?或者我通过什么参数可以知道服务器返回的就是JSON格式? 123Marchapril 发表于 2021-5-11 09:24
还有一个问题是我看服务器返回的JSON格式和文本格式没啥区别,我从哪里可以看到是JSON格式呢?或者我通过 ...
要么用眼睛看,要么就异常
又不是自己的服务器,鬼知道他是不是 json 格式 异常的话,用 json 模块 load 下如果失败就说明不是 json 格式,成功就是 json 格式 本帖最后由 123Marchapril 于 2021-5-11 09:40 编辑
yuxijian2020 发表于 2021-5-11 09:36
要么用眼睛看,要么就异常
又不是自己的服务器,鬼知道他是不是 json 格式
还有一个问题是,在小甲鱼视频第54讲中,为什么data = urllib.parse.urlencode(data)不可以,必须得是data = urllib.parse.urlencode(data).encode('utf-8')?既然默认编码就是utf-8了,再编码成为utf-8不是多此一举吗?为什么这样写呢?
import urllib.request
import urllib.parse
import json
import sys
while True:
content = input('请输入需要翻译的:')
if content == 'stop'or content == '再见':
print('再见')
break
data = {}
data['i']= content
data['doctype']= 'json'
print(sys.getdefaultencoding()) #############
data = urllib.parse.urlencode(data).encode('utf-8')##########
url = 'https://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
response = urllib.request.urlopen(url,data)
html = response.read().decode('utf-8')
d = json.loads(html)
print('翻译结果: %s'% (d['translateResult']['tgt']))
第17行每次都输出utf-8,那为什么第18行还要encode('utf-8')呢?既然已经是utf-8了,为什么还要编码为utf-8? yuxijian2020 发表于 2021-5-11 09:37
异常的话,用 json 模块 load 下如果失败就说明不是 json 格式,成功就是 json 格式
你好,我还有个问题是,就是我提问问题的代码,我在17行加了一行:print(sys.getdefaultencoding()),然后每次都是输出utf-8,既然Python默认用的是utf-8,同时在本代码中也是用的utf-8,那么早提问问题的第18行为什么必须在后面加.encode('utf-8')???这不是多此一举吗???但是去掉就是不行 123Marchapril 发表于 2021-5-11 09:45
你好,我还有个问题是,就是我提问问题的代码,我在17行加了一行:print(sys.getdefaultencoding()),然后 ...
仔细看看参数需要的是什么类型?
data = urllib.parse.urlencode(data)
print(type(data))
data = data.encode('utf-8')
print(type(data))
再看看我加了一点之后输出的结果 就因为他是utf-8所以才要编码(encode) 编码为字节码
解码是(decode),适用于把字节码转换为对应编码的字符串 yuxijian2020 发表于 2021-5-11 09:51
就因为他是utf-8所以才要编码(encode) 编码为字节码
解码是(decode),适用于把字节码转换为对应编码的字 ...
谢谢老哥!
页:
[1]
2