[問題] BBS美工圖案檔與Unicode的轉換問題
(為了避免誤導,修正部分內容。)
我正在寫一個處理ANSI檔(.ans)的Windows MFC應用程式,
其目的在於讓使用者能用類似小畫家的方式編輯ANSI美工作品。
目前使用Visual Studio 2017編譯,但並沒有用到任何C#的部分。
由於PCMan支援Unicode補完計畫,要看日文是沒問題的。
但我也不意外地在Unicode、Big5、以及BBS色碼的恩怨情仇中摔了一大跤。
我希望能做到以下兩件事情:
1. 在PCMan的「ANSI編輯」介面中,輸入日文內容。
將檔案存為.ans檔後,在我的程式中打開並編輯。
2. 在我的程式中,輸入日文內容。
將檔案存為.ans檔後,在PCMan的「ANSI編輯」中打開並編輯。
在PCMan的ANSI編輯功能中,如果打入日文字再存檔,會採用Big5編碼。
(很合理,如果用Unicode的話,控制碼會讓你死得很難看)
而我的程式所輸出的.ans檔,也必須採用Big5編碼,否則PCMan也無法讀入。
問題在於,我的程式需要把Big5轉換為Unicode來處理每個字元。
如果只是單純的中英文混合,那用MultiByteToWideChar https://tinyurl.com/y54qkkpd
然後把CodePage設成950就能產生正常的Unicode了。
要把內容寫成Ansi檔,也只是WideCharToMultiByte之類的事情。
碰上日文等不包含在CodePage 950內的符號時,事情就麻煩了。
歷史痕跡告訴我CodePage 951可能有用,但MultiByteToWideChar表示我不認識他。
網路搜尋的結果提到了這個工具:
Microsoft Character Code Conversion Routines For HKSCS-2004
https://www.microsoft.com/en-us/download/details.aspx?id=12080
而點開連結也可以發現它早就被拋棄了,當然茫茫網海中或許還撈的到。
請問包含這些字元的Big5 ←→ Unicode之間的轉換,
在C/C++中有沒有什麼正式的轉換方法,還是我漏掉了什麼重要的環節?
由於這個程式只是要方便他人編輯ANSI檔案,
因此只要能轉換「PCMan看得懂且輸出的編碼格式」即可。
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.160.166.44
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1554991515.A.883.html
推
04/12 00:55,
5年前
, 1F
04/12 00:55, 1F
→
04/12 01:03,
5年前
, 2F
04/12 01:03, 2F
我知道所謂的「Unicode補完」其實只是Big5碼的延伸,
但它可以讓使用者看到日文,所以我的程式也必須處理
否則不管是在哪一邊輸入日文,轉成.ans後另外一邊都會看不懂
或是我在考慮…如果能找到表的話,自己寫一個可能比較直接
推
04/12 14:12,
5年前
, 3F
04/12 14:12, 3F
應用程式本身要用UTF-8或Unicode都沒差,也好處理
問題在於.ans檔中的色碼,如果要讓色碼如預期顯示在半個字元上,需要額外處理
雖然可以用一些規則來判斷(如UTF-8中2BYTE以上的字元只要中間有色碼就當他是一半)
但最大的問題是PCMan/PHJCI存下的東西不是UTF-8而是Big5-HKSCS
所以如果我的程式不能翻譯HKSCS,交互使用的體驗就會超級糟糕
如果只是要定義一種「文字內容用Unicode編碼,裡面穿插色碼」的格式
那我在程式裡面自己來就可以了,但這個格式也只有我的程式可以打開
目前往自己轉的方向考慮了,反正也不過是for loop的事情,只是要先找到表......
※ 編輯: kirimaru73 (118.163.84.235), 04/12/2019 17:45:27
推
04/14 01:27,
5年前
, 4F
04/14 01:27, 4F
→
04/14 01:28,
5年前
, 5F
04/14 01:28, 5F
→
04/14 01:28,
5年前
, 6F
04/14 01:28, 6F
※ 編輯: kirimaru73 (118.160.164.40), 04/14/2019 19:42:29
討論串 (同標題文章)
完整討論串 (本文為第 1 之 2 篇):