LindDotNetCore~docker里圖像上生成中文亂碼問題
因(yin)為docker上(shang)的大部分鏡(jing)像都是基(ji)于linux系(xi)統的,所以(yi)在(zai)向圖像中寫中文時需(xu)要考(kao)慮中文字體問題,例(li)如在(zai)microsoft/aspnetcore2.0這個(ge)鏡(jing)像,它是基(ji)于debian系(xi)統的,它上(shang)面只有一個(ge)英文字體,所以(yi)在(zai)輸出中文時會出現亂碼,這是正(zheng)常的,我(wo)們的解決方(fang)案也需(xu)要按(an)著以(yi)下步驟即可(ke)!
問題表現
- linux系統上
- docker容器上
- dotnetcore System.Drawing輸出文字上
解決思路
- dockerfile里動態安裝中文字體,激活字體
- dotnetcore里使用新添加的字體,網上介紹很多的是文泉驛正黑,注意它的名字,不要寫錯,也可以使用字母名稱WenQuanYi Zen Hei,注意它有空格的
- docker build --no-cache . 運行你的dockerfile生成新的鏡像,docker run你的鏡像即可
具體代碼
一(yi) dockerfile里動態添加字(zi)體和刷新
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里生產中文字(zi)體(ti)
Font fTitle = new Font("文(wen)泉驛正黑", 16); Font fText = new Font("WenQuanYi Zen Hei", 9);
三 同時可以進入容器(qi),查看已經安裝過的(de)中文字體
fc-list :lang=zh //:號前面有空格

事實上,通過顯示(shi)的就是當前容器所在的linux操作(zuo)系統支持的中(zhong)文字(zi)體(ti),你在圖像上輸出中(zhong)文時,需要(yao)使用上面的字(zi)體(ti)!
對dotnetcore上的System.Drawing環境搭建可以查看我的這篇文章:DotNetCore跨平臺~System.DrawingCore部署Linux需要注意的
四 安(an)裝fc-list命(ming)令
`fc-list`命令通常是通過安裝Fontconfig軟件包來獲得的,這個軟件包提供了用于管理字體的工具和庫。在大多數Linux發行版中,Fontconfig已經預先安裝了,因此你可以直接使用`fc-list`命令。 如果你的系統中沒有安裝Fontconfig或者找不到`fc-list`命令,你可以嘗試通過包管理器安裝Fontconfig軟件包。以下是一些常見的Linux發行版上安裝Fontconfig的方法: 對于Debian/Ubuntu系統,你可以使用apt包管理器進行安裝: ```bash sudo apt-get install fontconfig ``` 對于CentOS/RHEL系統,你可以使用yum包管理器進行安裝: ```bash sudo yum install fontconfig ``` 對于Fedora系統,你可以使用dnf包管理器進行安裝: ```bash sudo dnf install fontconfig ``` 安裝完成后,你就可以使用`fc-list`命令來列出系統中的字體列表了。希望這能幫助到你順利安裝`fc-list`命令!
感謝閱讀(du)!