Как использовать fcitx-pinyin в докере wechat?
Я создаю образ с помощью wechat.Dockerfile:
docker build -f wechat.Dockerfile --tag=wechat:0.0.3 .
Вставили в докер-хаб, можете вытащить.
docker pull yufeiluo/wechat:0.0.3
Запустите его с помощью:
xhost +
docker run -d --name wechat --device /dev/snd \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-v $HOME/WeChatFiles:/WeChatFiles \
-e DISPLAY=unix$DISPLAY \
-e XMODIFIERS=@im=fcitx \
-e QT_IM_MODULE=fcitx \
-e GTK_IM_MODULE=fcitx \
-e AUDIO_GID=`getent group audio | cut -d: -f3` \
-e GID=`id -g` -e UID=`id -u` yufeiluo/wechat:0.0.3
Теперь отсканируйте его с помощью приложения WeChat на мобильном телефоне, вы входите в WeChat. Есть проблема, которую я не могу решить: переключение методов ввода не работает для моего Docker WeChat! Я не могу ввести символ CJK в WeChat, работающем в докере. .
Как можно переписать
wechat.Dockerfile
создать образ, который может использовать fcitx-pinyin в образе докера wechat?
2 ответа
Проблема, по-видимому, заключается в том, что имя акции, соответствующее коду акции 688279 (峰岹科技), при кодировании в GB 2312 генерирует байты, которые являются недопустимыми UTF-8.
В вашем коде вы звоните:
urllib.request.urlopen(req).read()
который вернет необработанные байты ответа. Предположительно где-то внутри:
lxml.html.fromstring(data_string)
сделано неверное предположение о правильной кодировке, и обработка просто останавливается, когда обнаруживается недопустимый символ.
Лучший путь вперед, по-видимому, описан здесь , который декодирует прочитанные байты с кодировкой набора символов, возвращенной как часть ответа HTTP, вместо того, чтобы откладывать доlxml
для определения кодировки символов. Итак, в данном конкретном случае это включает в себя изменение:
data_string=urllib.request.urlopen(req).read()
на что-то вроде:
resource=urllib.request.urlopen(req)
data_string=resource.read().decode(resource.headers.get_content_charset())
Кодировка на целевой веб-странице:gb2312
,но если вы его используете, возникает неверная ошибка кодирования, пробовал много раз, наконец установилgbk
работает отлично!
def get_rows(page):
import urllib.request
import lxml.html
url = "http://vip.stock.finance.sina.com.cn/q/go.php/vFinanceAnalyze/kind/profit/"\
"index.phtml?s_i=&s_a=&s_c=&reportdate=2021&quarter=4&p={}".format(page)
table_xpath = '//*[@id="dataTable"]'
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0'}
req = urllib.request.Request(url=url, headers=headers)
data_string=urllib.request.urlopen(req).read().decode('gbk')
root=lxml.html.fromstring(data_string)
dtable = root.xpath(table_xpath)[0]
rows = dtable.xpath('.//tr')
print(len(rows))