Python 错误类型转换导致urllib.request.urlopen无法作为字符串使用

Python 错误类型转换导致urllib.request.urlopen无法作为字符串使用,python,python-3.x,urllib,Python,Python 3.x,Urllib,在Python3.x中,在获取url urllib.request.urlopen的值之后 sock = urllib.request.urlopen(url) code = sock.read (100) code = code.replace( '\n' , 'enter' ) code = code.replace( '\t' , 'tab' ) 我不能将“代码”视为字符串,它返回类型转换错误 code = code.replace( '\n' , 'enter' ) code =

在Python3.x中,在获取url urllib.request.urlopen的值之后

sock = urllib.request.urlopen(url)
code = sock.read (100)
code = code.replace( '\n' , 'enter' )
code = code.replace( '\t' ,  'tab'  )
我不能将“代码”视为字符串,它返回类型转换错误

code = code.replace( '\n' , 'enter' )
code = code.replace( '\t' ,  'tab'  )
请求返回字节值

替换时,可以解码为字符串,也可以使用字节文字:

code = code.replace(b'\n', b'enter')
code = code.replace(b'\t', b'tab')
解码要求您知道文本内容使用了什么编解码器。您可以查看是否返回了内容字符集:

codec = sock.info().get_param('charset')
如果该值不是“无”,则可以使用该编解码器进行解码:

code = code.decode(codec)
文本/mimetype响应的默认编解码器是ISO-8859-1 Latin 1,但HTML响应通常在标题中的标记中设置所需的编解码器。将其解码留给有能力的HTML解析器,如BeautifulSoup。

在编写之前:

code = code.replace('\n', 'enter')
code = code.replace('\t', 'tab')
写下:

code = code.decode('utf-8')
最后,您的代码变成:

code = code.decode('utf-8')
code = code.replace('\n', 'enter')
code = code.replace('\t', 'tab')
urllib.request.urlopen返回字节数据


注意:因为您有f.sock,如果您有一个判断urllib.request.urlopen?

什么是f.sock100?它与urllib.request.urlopen响应有何关系?您应该包括您收到的实际回溯。我的android手机的python3解释器有问题,因为无法识别语句code.replace code=b'\n',b'enter'。但是在我的笔记本电脑的控制台里工作得很好。我写错了,指令是code.decode。。。使用android pyton3,我的手机和笔记本电脑上的ThanksWorks非常完美。请注意,不能总是假设响应为UTF-8。这取决于确切的反应。