回到目錄 因為docker上的大部分鏡像都是基於linux系統的,所以在向圖像中寫中文時需要考慮中文字體問題,例如在microsoft/aspnetcore2.0這個鏡像,它是基於debian系統的,它上面只有一個英文字體,所以在輸出中文時會出現亂碼,這是正常的,我們的解決方案也需要按著以下步驟即可 ...
因為docker上的大部分鏡像都是基於linux系統的,所以在向圖像中寫中文時需要考慮中文字體問題,例如在microsoft/aspnetcore2.0這個鏡像,它是基於debian系統的,它上面只有一個英文字體,所以在輸出中文時會出現亂碼,這是正常的,我們的解決方案也需要按著以下步驟即可!
問題表現
- linux系統上
- docker容器上
- dotnetcore System.Drawing輸出文字上
解決思路
- dockerfile里動態安裝中文字體,激活字體
- dotnetcore里使用新添加的字體,網上介紹很多的是文泉驛正黑,註意它的名字,不要寫錯,也可以使用字母名稱WenQuanYi Zen Hei,註意它有空格的
- docker build --no-cache . 運行你的dockerfile生成新的鏡像,docker run你的鏡像即可
具體代碼
一 dockerfile里動態添加字體和刷新
FROM microsoft/aspnetcore:2.0 WORKDIR /app EXPOSE 80 RUN ls COPY publish . COPY sources.list /etc/apt/sources.list RUN apt-get update && apt-get -y install libgdiplus RUN apt-get -y install fonts-wqy-zenhei && apt-get clean && fc-cache -fv ENTRYPOINT ["dotnet", "FileUpload.dll"]
二 在System.Drawing里生產中文字體
Font fTitle = new Font("文泉驛正黑", 16); Font fText = new Font("WenQuanYi Zen Hei", 9);
三 同時可以進入容器,查看已經安裝過的中文字體
fc-list :lang=zh //:號前面有空格
事實上,通過顯示的就是當前容器所在的linux操作系統支持的中文字體,你在圖像上輸出中文時,需要使用上面的字體!
對dotnetcore上的System.Drawing環境搭建可以查看我的這篇文章:DotNetCore跨平臺~System.DrawingCore部署Linux需要註意的
感謝閱讀!