? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 原創(chuàng)者:文思
繼上一篇代碼編寫和部署后炭序,這次測(cè)試發(fā)現(xiàn)轉(zhuǎn)換后的pdf的中文都是亂碼纳猪,作為程序員的我第一時(shí)間就去想到了gbk與utf-8之間的字符集編碼轉(zhuǎn)換問題。首先在本地windows環(huán)境測(cè)試哗魂,生成的pdf不是亂碼蔼囊,后來把docx都改成了odt蒙幻,然后又嘗試用流的形式加上utf-8參數(shù)中轉(zhuǎn)一下映凳,也不行。百度上有說是linux沒有中文字符集邮破,那就試試看了诈豌。
要查看系統(tǒng)中已經(jīng)安裝的字體,我們可以使用fc-list命令進(jìn)行查看抒和。如果系統(tǒng)中沒有該命令的話矫渔,我們需要先安裝相關(guān)的軟件包。
yum install -y fontconfig mkfontscale
fc-list :lang=zh
可以看到默認(rèn)情況下是沒有安裝中文字體的摧莽。
我們現(xiàn)在需要把楷體文件上傳到linux服務(wù)器上庙洼。在windows下找到
復(fù)制到linux系統(tǒng)的/usr/share/fonts/目錄下
再次命令查看:
運(yùn)行doc轉(zhuǎn)pdf:
已中文亂碼問題已經(jīng)解決,可顯示。添加一種字體即可油够,其它沒有的字體都會(huì)轉(zhuǎn)成成此字體蚁袭,如果也想展示其它字體的效果,依次添加其它字體石咬。
續(xù):
測(cè)試環(huán)境ok了揩悄,在生產(chǎn)環(huán)境上也出現(xiàn)中文亂碼了,將生產(chǎn)環(huán)境也以上述安裝了一個(gè)字體后還是亂碼鬼悠,就用env和locale命令查看字符集:
生產(chǎn)環(huán)境上env:
LANG=en_US.UTF-8
沒有亂碼問題的測(cè)試環(huán)境上env:
LANG=zh_CN.UTF-8
運(yùn)行l(wèi)ocal查看字符集:
生產(chǎn)環(huán)境上locale:
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
沒有亂碼問題的測(cè)試環(huán)境上locale:
LANG=zh_CN.UTF-8
LC_CTYPE="zh_CN.UTF-8"
LC_NUMERIC="zh_CN.UTF-8"
LC_TIME="zh_CN.UTF-8"
LC_COLLATE="zh_CN.UTF-8"
LC_MONETARY="zh_CN.UTF-8"
LC_MESSAGES="zh_CN.UTF-8"
LC_PAPER="zh_CN.UTF-8"
LC_NAME="zh_CN.UTF-8"
LC_ADDRESS="zh_CN.UTF-8"
LC_TELEPHONE="zh_CN.UTF-8"
LC_MEASUREMENT="zh_CN.UTF-8"
LC_IDENTIFICATION="zh_CN.UTF-8"
LC_ALL=
字符集不一樣删性,新打開了一個(gè)shell命令窗口設(shè)置生產(chǎn)環(huán)境字符集為zh_CN.UTF-8,然后在原來的shell命令窗口重啟服務(wù)厦章,注意镇匀,剛才操作是新打開了一個(gè)命令窗口進(jìn)行字符集設(shè)置的照藻,重啟服務(wù)是在原來老的命令窗口重啟的袜啃。重啟后竟然沒有生效還是亂碼,到這一步真快瘋了幸缕,后來在原有的shell命令窗口再次查看字符集發(fā)現(xiàn)字符集沒變群发,就猜想原來的shell命令窗口只對(duì)當(dāng)前的環(huán)境有效,對(duì)其它新窗口設(shè)置的環(huán)境沒有加載和生效发乔,原理有些類似在window的命令行界面下的環(huán)境變量set設(shè)置原理熟妓,只對(duì)當(dāng)前窗口有效。于是重新打開一個(gè)新的shell命令窗口栏尚,重啟服務(wù)起愈,一下ok了,問題圓滿解決译仗。