如何打造一個zh_TW.utf8的環境?

Moderator: Forums Team

betaparticle
Posts: 312
Joined: Thu Jan 01, 2004 12:46 pm

如何打造一個zh_TW.utf8的環境?

Post by betaparticle »

0.前言
大家都希望,中文編碼最後能統一是最好的,但現在看起來把big5換成utf8會很難過。
因為我用的是gnome,所以我目前是在gnome下的環境做這件事。
在這個轉換的過渡期,我遇到了一些麻煩,只解決了一點點,我寫在底下,希望有經驗的大大,能幫幫忙。
同時也希望能給有需要又不知如何下手的人,一個比較簡單的方式去克服這件事情。

我的步驟:
1.安裝字型
依據

螢火蟲公園,螢火大的文章


裡面,找到ming_uni.ttf字型來安裝含utf8中文字型
該字型位置在
http://www.info.gov.hk/digital21/unicod ... rms34.html

解開來放在/usr/X11R6/lib/X11/fonts/truetype

如果你有裝螢火飛大大的xffmgr,請執行 # xttmgr --add ming_uni.ttf應該是輕鬆搞定

如果你跟我一樣沒有裝的話,
請確認XF86Config裡面字型目錄有FontPath "/usr/X11R6/lib/X11/fonts/truetype",
/etc/fonts/fonts.conf裡面有
<dir>/usr/X11R6/lib/X11/fonts/truetype</dir>
在可能的<alias>.....</alias>裡面加入
<family>Ming(for ISO10646)</family>
然後,執行 #fc-cache
另外,因為看起來也要改fonts.dir,而我也不太會改。聽說xfs會幫忙改,所以就利用/etc/init.d/xfs start來幫忙。
(但是我本身平常是沒有開xfs,也不太懂,所以不確定這一個動作的真正效用,但,做完了之後,是ok的。)

到了這裡,用fc-list及xlsfonts是可以看到
Ming(for ISO10646):style=Regular

......
-misc-ming(for iso10646)-medium-r-normal--0-0-0-0-c-0-iso10646-1
.......

2. utf8的locale
我想,為了在gnome-terminal底下,可以看到utf8中文檔名,
需要做出utf8的locale,於是參考http://forums.gentoo.org.tw/viewtopic.p ... =xcin+utf8
Tiberius大大的方法,執行
localedef -i zh_TW -f UTF-8 zh_TW.UTF-8
之後,在gnome-terminal裡面,export LC_CTYPE=zh_TW.UTF-8,就可以看到utf8中文的檔名了。
這裡我想修正一下,在gentoo底下,如果你用locale -a可以看到
zh_TW.utf8應該就可以不用自己做出locale了。
像我自己用localedef -i zh_TW -f UTF-8 zh_TW.UTF-8 -v
就看到整個過程是失敗的。
而有了zh_TW.utf8的話(據說這是給glibc用的)。再檢查/usr/X11R6/lib/X11/locale應該要有zh_TW.UTF-8(據說這是給Xfree用的),
對於gentoo使用者來說,這些都是ok的,如果你的USE有nls, cjk。
關於locale的問題,我是參考:
http://xcin.linux.org.tw/i18n/i18n_tool ... .Big5.html

感謝scsi大給我以下的訊息,如果有需要的人可以用用。
btw, in default, gentoo does not have locale zh_TW.UTF-8, you may create it
yourself as follow:

2-1.cd /usr/share/i18n/locales
2-2.cp ../charmaps/UTF-8.gz ./
2-3.gunzip UTF-8.gz
2-4.localedef -i zh_TW -f UTF-8 zh_TW.UTF-8

3.轉換硬碟裡的big5檔名-->utf8檔名
請參考這裡這裡

4.中文輸入法
paar大有改了一個比較完美ebuild來安裝,
檔案在這裡
記得,還要先emerge rpm2targz。
如果你有了rpm2targz,那就可以直接使用這個ebuild。
因為螢火飛大把所有東西都包在srpm裡,我們抓回來一個檔就可以了。

別忘了,你要執行xcin前,要把下列環境參數設定好

Code: Select all

export LC_CTYPE=zh_TW.UTF-8
export XIM=xcin-zh_TW.UTF-8
export XIM_PROGRAM=xcin-zh_TW.UTF-8
export XMODIFIERS="@im=xcin-zh_TW.UTF-8"
export GTK_IM_MODULE=xim
如果你發生以下的錯誤訊息:

Code: Select all

xcin:error: X locale "zh_TW.UTF-8" is not supported by your system.
應該是你的X locale不小心被動到了,只要重新emerge xfree就好了。

5.GTK1軟體在UTF-8的問題
參考paar大的,一下就搞定了
http://forums.gentoo.org.tw/viewtopic.php?t=41609

6.還有問題的地方
6.1 xmms的id3 tag是亂碼。
6.2 應該還有,因為我的系統很簡單,所以不知道還有什麼問題,
如果大家有什麼問題,一起來討論好了。

6. 感謝
螢火飛大大及paar大大的幫忙
Last edited by betaparticle on Thu Mar 25, 2004 8:07 pm, edited 17 times in total.
ccpz
Posts: 167
Joined: Fri Aug 01, 2003 8:33 am
Location: 新竹

Post by ccpz »

4.中文輸入法
目前我還沒有把全系統都換成zh_TW.utf8,就是因為我還搞不定xcin這個部份,
雖然有許多前輩都做完了這個工作,且看起來ccpz大有寫出ebuild,但是我無法從http://www.gentoo.org.tw/~ccpz/下載,
所以這個部份還需要大大們的幫忙。
現在www.got掛掉了,所以連不上
我整理的ebuild目前還沒有寫xcin的
或許可以考慮直接去firefly的網站抓下patch檔改改看
http://firefly.idv.tw/test/Forum.php?Board=1
這一兩天會把那些ebuild檔更新,有空的話就會寫 xcin 的 ebuild
不過看起來連輸入法那些也要更新,好像不是加入patch檔這麼簡單
betaparticle
Posts: 312
Joined: Thu Jan 01, 2004 12:46 pm

Post by betaparticle »

ccpz wrote:
4.中文輸入法
目前我還沒有把全系統都換成zh_TW.utf8,就是因為我還搞不定xcin這個部份,
雖然有許多前輩都做完了這個工作,且看起來ccpz大有寫出ebuild,但是我無法從http://www.gentoo.org.tw/~ccpz/下載,
所以這個部份還需要大大們的幫忙。
現在www.got掛掉了,所以連不上
我整理的ebuild目前還沒有寫xcin的
或許可以考慮直接去firefly的網站抓下patch檔改改看
http://firefly.idv.tw/test/Forum.php?Board=1
這一兩天會把那些ebuild檔更新,有空的話就會寫 xcin 的 ebuild
不過看起來連輸入法那些也要更新,好像不是加入patch檔這麼簡單

不好意思,因為我連rpm都不太會用,所以……
我對linux真的還不熟,好不容易架起來的gentoo,怕裝壞掉了。
不過,我寫了個ebuild可以把飛兄的patch及srpm抓回來並且安裝好。
我只改了src_unpack(),基本上就是把飛兄的srpm抓回來,用rpm2targz轉成tar.gz的檔案,
然後用tar -zxvf解開,
最後用epatch把patch執行完畢。
(ie. EPATCH_OPTS="-d ${S}" epatch ${WORKDIR}/xcin-2.5.3-cj5_utf8.patch)

但這樣會有一點小問題。
1. /usr/X11R6/lib/X11/xcin25/tab/utf-8/sys.tab, cj5.tab, simplex5.tab
需要自己從*.cin.utf-8轉出來。
2. xcinrc是舊的版本,需要從/var/tmp/portage/xcin/work/xcin/etc把xcinrc.LINUX
複製到/etc/xcinrc
3. 只有cj5, simplex5這兩個輸入法,其他的輸入法沒有。

能幫我看看為什麼嗎?
而且,我這樣隨便改改就放給大家用,會不會違法啊?
我能偷偷寄給你幫我看嗎?
Last edited by betaparticle on Tue Feb 24, 2004 11:28 pm, edited 3 times in total.
betaparticle
Posts: 312
Joined: Thu Jan 01, 2004 12:46 pm

Post by betaparticle »

我還有另外一個問題,
到底正確的 locale 是要設成 zh_TW.utf8 還是 zh_TW.utf-8 還是 zh_TW.UTF-8
我用locale -a 是出現 zh_TW.utf8
可是 /usr/X11R6/lib/X11/locale 只有zh_TW.UTF-8

被大小寫還有-搞暈了
YZ
Posts: 11
Joined: Mon Feb 16, 2004 9:50 pm

Re: 如何打造一個zh_TW.utf8的環境?

Post by YZ »

betaparticle wrote:
到了這裡,用fc-list及xlsfonts是可以看到
Ming(for ISO10646):style=Regular

......
-misc-ming(for iso10646)-medium-r-normal--0-0-0-0-c-0-iso10646-1
.......
請問一下,我用 fc-list 看到的與你一樣,可是用 xlsfonts
就是看不到 -misc-ming(for iso10646)-medium-r-normal--0-0-0-0-c-0-iso10646-1

請問你有遇過這種情形嗎?
betaparticle
Posts: 312
Joined: Thu Jan 01, 2004 12:46 pm

Re: 如何打造一個zh_TW.utf8的環境?

Post by betaparticle »

YZ wrote:
請問一下,我用 fc-list 看到的與你一樣,可是用 xlsfonts
就是看不到 -misc-ming(for iso10646)-medium-r-normal--0-0-0-0-c-0-iso10646-1

請問你有遇過這種情形嗎?
請問你有用/etc/init.d/xfs restart讓xfs寫一下font.dir嗎?
如果有的話,應該是看得到的。

如果還是看不到…我就不知該怎麼辦了。
要不要試試看裝xttmgr?
YZ
Posts: 11
Joined: Mon Feb 16, 2004 9:50 pm

Re: 如何打造一個zh_TW.utf8的環境?

Post by YZ »

betaparticle wrote: 請問你有用/etc/init.d/xfs restart讓xfs寫一下font.dir嗎?
如果有的話,應該是看得到的。

如果還是看不到…我就不知該怎麼辦了。
要不要試試看裝xttmgr?
有啊,xttmgr , xfs 我都試過了,看 font.dir 裡面也有該字型,
可是 xlsfonts 就是沒有,不知道我是哪裡設定有錯....再找找 google 好了.
feuer
Posts: 218
Joined: Mon Jan 13, 2003 11:17 am
Location: 天涯

Post by feuer »

betaparticle wrote:我還有另外一個問題,
到底正確的 locale 是要設成 zh_TW.utf8 還是 zh_TW.utf-8 還是 zh_TW.UTF-8
我用locale -a 是出現 zh_TW.utf8
可是 /usr/X11R6/lib/X11/locale 只有zh_TW.UTF-8

被大小寫還有-搞暈了
我的 /usr/share/locale/ 和 /usr/X11R6/lib/X11/locale 裡都是 zh_TW.UTF-8
locale -a 也是 zh_TW.UTF-8
(Mandrake 9.2)
betaparticle
Posts: 312
Joined: Thu Jan 01, 2004 12:46 pm

Re: 如何打造一個zh_TW.utf8的環境?

Post by betaparticle »

YZ wrote:
betaparticle wrote: 請問你有用/etc/init.d/xfs restart讓xfs寫一下font.dir嗎?
如果有的話,應該是看得到的。

如果還是看不到…我就不知該怎麼辦了。
要不要試試看裝xttmgr?
有啊,xttmgr , xfs 我都試過了,看 font.dir 裡面也有該字型,
可是 xlsfonts 就是沒有,不知道我是哪裡設定有錯....再找找 google 好了.
你的XF86Config有沒有該字型的目錄呢?
我看到有三個地方設定字型,一個是/etc/fonts/* (xftconfig用的)
一個是/etc/X11/fs/* (應該是xfs用的),最後一個是XF86Config (應該是X用的)。 如果這三個地方都設定好了,應該可以了吧?
betaparticle
Posts: 312
Joined: Thu Jan 01, 2004 12:46 pm

Post by betaparticle »

更新:
xcin的ebuild內容
增加cynosure大的script,可以連子目錄一起搞定。
Si大的script連結
utf locale的建立
xcin起動時可能的QA
scsi大提供的"增加 zh_TW.UTF-8的方法"
刪除自動轉換目錄/檔案名稱 big5-->utf8 的script。因為,會將目錄/檔案改到不見。
刪除ebuild內容,使用paar大的ebuild
Last edited by betaparticle on Thu Mar 25, 2004 1:53 pm, edited 3 times in total.
cynosure
Posts: 2
Joined: Sun Oct 12, 2003 2:36 am

Post by cynosure »

請問要不要把unicode補完加進去勒:D 這樣在跑Big5 to Utf8應該就能避掉含有Big5日文字的檔案會掛掉的問題。
我在那支script上加了料,讓它能處理子目錄:)

Code: Select all

for I in * ; do
    f=`echo "$I" | iconv -f big5 -t utf8` 
    if  [ -f "$I" ]
    then
    if  [ "$I" != "$f" ]
    then
        echo "$f"
        mv -v "$I" "$f"
    fi
    fi
done
for J in * ; do
    k=`echo "$J" | iconv -f big5 -t utf8` 
    if [ -d "$J" ]
    then
        path=`pwd`
        mv -v "$J" "$k"
        echo "dir ""$k" #where am i
        cd  "$path""/""$k"   
        /script的絕對路徑/名字
        cd "$path"
    fi
done
exit 1;
以上是改Si大的script,使用前要先把檔案備份,以免....
betaparticle
Posts: 312
Joined: Thu Jan 01, 2004 12:46 pm

Post by betaparticle »

cynosure wrote:請問要不要把unicode補完加進去勒:D 這樣在跑Big5 to Utf8應該就能避掉含有Big5日文字的檔案會掛掉的問題。
我在那支script上加了料,讓它能處理子目錄:)

Code: Select all

for I in * ; do
    f=`echo "$I" | iconv -f big5 -t utf8` 
    if  [ -f "$I" ]
    then
    if  [ "$I" != "$f" ]
    then
        echo "$f"
        mv -v "$I" "$f"
    fi
    fi
done
for J in * ; do
    k=`echo "$J" | iconv -f big5 -t utf8` 
    if [ -d "$J" ]
    then
        path=`pwd`
        mv -v "$J" "$k"
        echo "dir ""$k" #where am i
        cd  "$path""/""$k"   
        /script的絕對路徑/名字
        cd "$path"
    fi
done
exit 1;
以上是改Si大的script,使用前要先把檔案備份,以免....
嗚,我寫的真的不好。如果你的目錄/檔案名稱已經是unicode編碼的話,會讓把東西搞到不見……
我先把我的script收起來。
大家記得要先備份唷!
cynosure
Posts: 2
Joined: Sun Oct 12, 2003 2:36 am

Post by cynosure »

betaparticle:
你寫的script其實沒什麼問題啦,我的也是一樣的毛病阿 :oops:
希望要用的人不要跑兩次,沒作unicode補完的朋友也請把有含Big日文的地方處理掉,否則檔名大概會空白一片 8)
betaparticle
Posts: 312
Joined: Thu Jan 01, 2004 12:46 pm

Post by betaparticle »

cynosure wrote:請問要不要把unicode補完加進去勒:D 這樣在跑Big5 to Utf8應該就能避掉含有Big5日文字的檔案會掛掉的問題。
我在那支script上加了料,讓它能處理子目錄:)

Code: Select all

for I in * ; do
    f=`echo "$I" | iconv -f big5 -t utf8` 
    if  [ -f "$I" ]
    then
    if  [ "$I" != "$f" ]
    then
        echo "$f"
        mv -v "$I" "$f"
    fi
    fi
done
for J in * ; do
    k=`echo "$J" | iconv -f big5 -t utf8` 
    if [ -d "$J" ]
    then
        path=`pwd`
        mv -v "$J" "$k"
        echo "dir ""$k" #where am i
        cd  "$path""/""$k"   
        /script的絕對路徑/名字
        cd "$path"
    fi
done
exit 1;
以上是改Si大的script,使用前要先把檔案備份,以免....
如果有人想要加入backup及防呆功能的話,可以把下面的code加到cynosure的script的最前面。希望大家能在轉到utf8的時候,不再這麼痛苦

Code: Select all

#backup folder
if [ ! -d backup ]; then
	echo "backup not exists"
	mkdir backup
	for J in "${DIR}"/* ; do
		echo $J
		if [ $J != "./backup" ]; then
			cp -r $J backup
		fi
	done
else
	echo "backup exists"
fi

#check if convert is ok
ls  | iconv -f big5 -t utf8
if [ $? != 0 ]; then 
	exit 1
fi
betaparticle
Posts: 312
Joined: Thu Jan 01, 2004 12:46 pm

Post by betaparticle »

好吧,我又失去了我的寶貝mp3。都是因為我的script。
現在,我把script改成兩支,一支先跑出一個檔案,可以先讓你看一下修改完的檔名是不是正確。如果沒有發現問題,就可以用另一支來自動修改檔名。

你需要在自己的家目錄建一個目錄cbackup讓檢查script放檢查結果
及改名的script放備份檔。

檢查script : ic2check

Code: Select all

#!/bin/sh
# this script check the changes from big5 chinese file/directory name to utf8 file/directory name.
# it will recursive.
# it can handle the file name containing space.
# when you use this script, please change to the directory that you want to transfer files' name.
# then execute like "~/ic2check"
# This script will help you very much.
# Please make a directory named "cbackup" at your home dir.
# In directory "cbackup" you will see the result that ic2 will make.
# Check if everything is ok in ~/cbackup/ic2check.txt before you run ~/ic2

DIR="."

for I in * ; do
    echo "check... $I"
    f=`echo "$I" | iconv -f big5 -t utf8`
    if [ $? = 0 ]; then 
        if  [ "$I" != "$f" ];then
            echo "`pwd`/${I} --->  `pwd`/${f}"
            echo "`pwd`/${f}" >> ~/cbackup/ic2check.txt
        fi
    fi
done
echo "ok!"
for J in * ; do
    if [ -d "$J" ]
    then
        path=`pwd`
        echo "dir ""$J" #where am i
        cd  "$path""/""$J"   
        ~/ic2check
        cd "$path"
    fi
done 
exit 1;
改名字的script : ic2

Code: Select all

#!/bin/sh
# this script changes big5 chinese file/directory name to utf8 file/directory name.
# It will recursive.
# it can handle the file name containing space.
# when you use this script, please change to the directory that you want to transfer files' name.
# then execute like "~/ic2"
# i hope this script will not impact anything that will crash your system.
# this script works fine for me.

DIR="."

for I in * ; do
    echo "check... $I"
    f=`echo "$I" | iconv -f big5 -t utf8`
    if [ $? = 0 ]; then 
        if  [ "$I" != "$f" ];then
            echo "$f"
            cp -rv "$I" ~/cbackup/
            mv -v "$I" "$f"
            if [ $? = 0 ];then
                rm -rfv ~/cbackup/"$I"
            else
                echo "$f"
                exit 1;
            fi
        else
            echo "skip $I"
        fi
    else
        echo "skip $I"
    fi
done
echo "ok!"

#following from cynosure
for J in * ; do
    if [ -d "$J" ]
    then
        path=`pwd`
        echo "dir ""$J" #where am i
        cd  "$path""/""$J"   
        ~/ic2
        cd "$path"
    fi
done
ls *
exit 1;
感謝cynosure
Last edited by betaparticle on Thu Mar 18, 2004 2:57 pm, edited 1 time in total.
Post Reply