作者liu2007 (薯)
看板Programming
標題[問題] 碰到魔幻的文字顯示bug....
時間Tue Nov 9 11:19:55 2021
我的電腦上有這麼一個檔案,名字叫做
[しまじ] 声が変わる前に。君を、 <------網路上copy下來的文字
https://imgur.com/CRUIpc5 <------電腦資料夾裡顯示的文字
可以看到我從網路上copy下來的文字是正確的,電腦資料夾呈現的也是正確的
但是當我寫了一個程式去讀取檔案名稱的時候
https://imgur.com/osCDu59
https://imgur.com/PD3BisW
如紅色圈起來的地方所示,濁音的符號不見了
我想一定是我程式寫錯了
但是我複製資料夾上的名稱,也就是這張圖
https://imgur.com/CRUIpc5
然後再貼到筆記本裡面,卻顯示出
https://imgur.com/QlM3y5Z
而直接貼到ptt,會變成下面這個有點亂碼的情況
[しまし 声か饒vる前に。君を、 [Chinese] [篆儀通文書坊漢化]
我複製筆記本裡的文字用瀏覽器上網站使用網頁搜尋功能
卻又正常
https://imgur.com/QlM3y5Z
https://imgur.com/diHNdnx
https://imgur.com/F2ZUV6K
同樣我複製筆記本裡的文字,貼到我電腦裡另外一個程式Sublime Text
卻也正常
https://imgur.com/QlM3y5Z
https://imgur.com/1GvVXpr
想請問為什麼會有這樣奇怪的現象....
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.192.225.144 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Programming/M.1636427998.A.787.html
1F:推 LPH66: 應該是來源字串已經是 NFD 分解過的字了 49.159.72.196 11/09 13:38
2F:→ LPH66: じ (U+3058) 經過 NFD 會拆開成し (U+3057) 49.159.72.196 11/09 13:39
3F:→ LPH66: 和組合用濁點 U+3099, 會顯示不正常的就是 49.159.72.196 11/09 13:40
4F:→ LPH66: 這個組合用濁點沒有正確處理 49.159.72.196 11/09 13:40
5F:→ LPH66: 後者跟單獨打的濁點 ゛(U+309B) 是不一樣的 49.159.72.196 11/09 13:41
6F:推 LPH66: 至於你寫的程式的問題就要看你是用什麼方式 49.159.72.196 11/09 13:44
7F:→ LPH66: 去讀檔名; 會發生消失的狀況應該不是直接 49.159.72.196 11/09 13:44
8F:→ LPH66: 向系統讀 Unicode 檔名的那種 49.159.72.196 11/09 13:45
9F:→ LPH66: 這會讓系統先幫你轉成地區編碼(big5 等)後 49.159.72.196 11/09 13:46
10F:→ LPH66: 才回傳給你, 但 U+3099 沒有對應碼就吃掉了 49.159.72.196 11/09 13:47
感謝L大回復,我研究一下
※ 編輯: liu2007 (123.192.225.144 臺灣), 11/09/2021 14:18:14
程式的部分我是用QT寫的
讀取檔名其實也沒有什麼特別的操作
純粹就是
QFileInfo target{"F:\檔案A"}
target.fileName();
如此而已
我沒想到在日文上會有拆解的問題
※ 編輯: liu2007 (123.192.225.144 臺灣), 11/09/2021 14:36:58
11F:推 LPH66: 啊, QT 的話那 QString 有支援分解組合 49.159.72.196 11/09 15:03
12F:→ LPH66: 呼叫 normalized 函數並指令 NFC 型式 49.159.72.196 11/09 15:03
13F:→ LPH66: (NormalizationForm_C ←這個參數) 49.159.72.196 11/09 15:03
14F:→ LPH66: 就能幫你組起來了 49.159.72.196 11/09 15:04
15F:→ LPH66: 上三樓 指令→指定 49.159.72.196 11/09 15:05
16F:→ LPH66: 不然一般來說這種分解組合需要有函式庫幫忙 49.159.72.196 11/09 15:07
17F:→ LPH66: 這樣看起來似乎做拆解的可能是 QT 49.159.72.196 11/09 15:08
18F:→ LPH66: 主要因為就我所知 Windows 很少做自動拆組 49.159.72.196 11/09 15:28
19F:→ LPH66: (Windows 也有他自己的一套函數可以做就是) 49.159.72.196 11/09 15:28
20F:→ LPH66: 反而比較常聽到 Apple 很常幫拆 49.159.72.196 11/09 15:28
21F:→ LPH66: 但你這裡的使用情境顯然是 Windows... 49.159.72.196 11/09 15:28
沒錯,就是這個normalized,剛剛也是找到這個解
感謝L大的細心的指點
我想我下載的檔案應該是來自MacOS分享的檔案
然後Win7的系統、chrome、網站、Sublime Text都有做處理
但就是我的程式和win7內建的筆記本以及ptt沒做處理,所以才會產生錯誤吧?
總之非常感謝
本來以為這個問題不會有人回答XDDD
※ 編輯: liu2007 (123.192.225.144 臺灣), 11/09/2021 15:40:56