[問題] tty中文顯示問題

看板Linux作者 (DanzYam)時間10年前 (2015/07/02 20:30), 10年前編輯推噓1(1018)
留言19則, 3人參與, 最新討論串1/1
大家好,我知道在tty顯示中文很麻煩,所以我想知道在亂碼背後的顯示模式 問題是這樣的: 我有50萬個檔案要處理,格式大概是 501025_ID.txt 因為一開始沒限制作業ID只能用英文,所以有幾個中文ID混入 LINUX顯示如下 502222_123.txt 503312_??+??.txt (為中文所顯示的亂碼) 507832_cher.txt 503878_-?{D.txt (為中文所顯示的亂碼) 要把中文的ID換成英數比較好處理 所以我用 find . -regextype egrep -regex ".*_[^[:alnum:]].*" 或是改用 -------------------------------".*_\?\?\+\?\?.*" 都沒辦法抓出任何一條Orz 想請問的是,怎麼樣可以知道linux實際上對那字元的認知是什麼? 或是,有認何方式可以直接把這些中文亂碼換成可見的英數文字嗎? 例如: 我 \u{num} 謝謝 Dan -- 不過是人 http://www.facebook.com/twaiting -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 124.155.187.95 ※ 文章網址: https://www.ptt.cc/bbs/Linux/M.1435840252.A.199.html

07/02 20:52, , 1F
直接用wildcard來更改檔名會不會好一點?
07/02 20:52, 1F
是用「*」嗎?

07/02 22:36, , 2F
我覺得大概是big5編碼檔名吧?
07/02 22:36, 2F
我用big5內碼去search,無法匹配,看起來好像不是

07/03 00:22, , 3F
find . -regextype egrep -regex \
07/03 00:22, 3F

07/03 00:22, , 4F
'..*[^a-zA-Z0-9_-.)( /][^a-zA-Z0-9_-.)( /]*..*'
07/03 00:22, 4F

07/03 00:23, , 5F
剛剛測試find的正規表示,寫了這麼長才抓到直中文名
07/03 00:23, 5F

07/03 00:26, , 6F
中文檔名改碼或許可以找找關鍵字urlencode
07/03 00:26, 6F

07/03 00:27, , 7F
python2 -c "import urllib, sys
07/03 00:27, 7F

07/03 00:29, , 8F
print urllib.quote(sys.argv[1])" 4567889-我.txt
07/03 00:29, 8F

07/03 00:29, , 9F
在utf8環境下會輸出4567889-%E6%88%91.txt
07/03 00:29, 9F

07/03 01:29, , 10F
perl -MURI::Escape -e 'print
07/03 01:29, 10F

07/03 01:29, , 11F
uri_escape($ARGV[0])."\n";' "123-稍快.txt"
07/03 01:29, 11F

07/03 01:30, , 12F
2> /dev/null
07/03 01:30, 12F

07/03 01:31, , 13F
在utf8環境下會輸出123-%E7%A8%8D%E5%BF%AB.txt
07/03 01:31, 13F
謝謝,我試著search這些關鍵字 今天試了一下,有個檔名是 501111_我愛PTT.txt 顯示為 501111_??+?{PTT.txt 用 .* 可以找的到 用 .*_.*PTT.* 變找不到了 表示中文無法匹配點號嗎? 但.*又可以匹配Orz

07/03 11:13, , 14F
你的linux有原生支援中文嗎? 原則上在中文utf-8環境,句點
07/03 11:13, 14F

07/03 11:14, , 15F
可以match中文,那些亂碼已不是中文字,所以.只能match一字
07/03 11:14, 15F

07/03 11:14, , 16F
07/03 11:14, 16F

07/03 11:15, , 17F
另外你的第2個regex,有greedy的問題,要使用修飾,我比較熟
07/03 11:15, 17F

07/03 11:16, , 18F
程式語語用的regex, command line的不是很確定
07/03 11:16, 18F

07/03 11:18, , 19F
抱歉,我看錯了,上面15,16分的推文請忽略
07/03 11:18, 19F
謝謝,我試試把整個系統改成zh_TW.utf8看看 做為小菜鳥,我放棄在LINUX上做了一.一 用find . -regextype egrep -regex ".*_[[:alnum:]].*"|xargs -i mv {} ./file 把所有正確的檔抓出來 剩的拉到windows上修改檔名 ※ 編輯: cherubx (61.66.243.96), 07/03/2015 16:29:58
文章代碼(AID): #1LbIxy6P (Linux)
文章代碼(AID): #1LbIxy6P (Linux)