日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

Python 技术篇 - 修改源码解决中文主机名导致的flask、socket服务起不来问题: ‘utf-8‘ codec can‘t decode byte 0xc0 in position...

發(fā)布時(shí)間:2025/4/16 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python 技术篇 - 修改源码解决中文主机名导致的flask、socket服务起不来问题: ‘utf-8‘ codec can‘t decode byte 0xc0 in position... 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

由于主機(jī)名為中文導(dǎo)致的 flask 服務(wù)起不來,報(bào)錯(cuò)如下:
File "D:\work\python3.9_64\lib\socket.py", line 791, in getfqdn
hostname, aliases, ipaddrs = gethostbyaddr(name)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc0 in position 2: invalid start byte
最簡單的解決方法是:
修改計(jì)算機(jī)名為英文,然后重啟計(jì)算機(jī)。

修改源碼解決問題請(qǐng)網(wǎng)下看。
計(jì)算機(jī)名查看:

根據(jù)報(bào)錯(cuò)的位置查看文件為:

首先 getfqdn() 這個(gè)方法是為了獲取包含域名的計(jì)算機(jī)名,測(cè)試是用的英文計(jì)算機(jī)名。

>>> import socket >>> socket.getfqdn("127.0.0.1") 'lanzao.xxx.com.cn'

Get fully qualified domain name from name.
An empty argument is interpreted as meaning the local host.
First the hostname returned by gethostbyaddr() is checked, then
possibly existing aliases. In case no FQDN is available, hostname
from gethostname() is returned.
譯文:
從名稱中獲得完全合格的域名。
空參數(shù)被解釋為表示本地主機(jī)。
首先檢查gethostbyaddr()返回的主機(jī)名,然后
可能現(xiàn)有的別名。如果沒有可用的FQDN,請(qǐng)輸入主機(jī)名
從gethostname()返回。

用英文計(jì)算機(jī)名進(jìn)行測(cè)試內(nèi)部方法:

>>> socket.gethostbyaddr("127.0.0.1") ('lanzao.xxx.com.cn', [], ['127.0.0.1']) >>> socket.gethostbyaddr("lanzao") ('lanzao.xxx.com.cn', [], ['fexx::a9xx:7fxx:15xx:5fxx']) >>> socket.gethostname() 'lanzao'

中文情況下 gethostbyaddr() 報(bào)錯(cuò),gethostname() 不會(huì)。
gethostbyaddr() 方法是封裝在 __socket__.pyd 包里的。
如果要徹底修改就涉及反編譯了。

我這里直接對(duì)現(xiàn)有方法進(jìn)行了改動(dòng),如果是中文計(jì)算機(jī)名,這里直接返回計(jì)算機(jī)名就可以了。
本來沒有域名的情況下返回的也是計(jì)算機(jī)名,只是針對(duì)這種中文的待域名的情況下,只能返回中文計(jì)算機(jī)名,這種場(chǎng)景比較少,而且如果我們的生產(chǎn)環(huán)境沒有獲取這種中文計(jì)算機(jī)名+域名的需求,這樣改動(dòng)幾乎沒有影響。

相應(yīng)代碼如下:

def getfqdn(name=''):"""Get fully qualified domain name from name.An empty argument is interpreted as meaning the local host.First the hostname returned by gethostbyaddr() is checked, thenpossibly existing aliases. In case no FQDN is available, hostnamefrom gethostname() is returned."""try:name = name.strip()if not name or name == '0.0.0.0':name = gethostname()try:hostname, aliases, ipaddrs = gethostbyaddr(name)except error:passelse:aliases.insert(0, hostname)for name in aliases:if '.' in name:breakelse:name = hostnamereturn nameexcept Exception as e:print(e)return gethostname() # 僅返回計(jì)算機(jī)名,無域名

至此,問題解決,flask、socket 服務(wù)順利起來,毫無影響。
喜歡的點(diǎn)個(gè)贊?吧!

總結(jié)

以上是生活随笔為你收集整理的Python 技术篇 - 修改源码解决中文主机名导致的flask、socket服务起不来问题: ‘utf-8‘ codec can‘t decode byte 0xc0 in position...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。