使用2.9版後,wxRichTextCtrl 的中文內容都變成亂

这是wxWidgets论坛的中文版本。在这里,您可以用您的母语汉语讨论上面任一子论坛所涉及的所有关于wxWidgets的话题。欢迎大家参与到对有价值的帖子的中英互译工作中来!
Post Reply
HeMason
Experienced Solver
Experienced Solver
Posts: 73
Joined: Tue Jun 30, 2009 10:07 am
Location: Taiwan
Contact:

使用2.9版後,wxRichTextCtrl 的中文內容都變成亂

Post by HeMason » Mon Sep 07, 2009 9:24 am

好像wx內部使用 UTF-8 當成內定的編碼。
那要怎樣設定才可以看到以前 Ascii 的簡繁體中文檔?
「漢書文書處理系統」作者,在這向大家學習。
MyBlog 梅僧山房

sishui
Earned some good credits
Earned some good credits
Posts: 121
Joined: Mon Mar 10, 2008 6:13 am
Location: 中國

Re: 使用2.9版後,wxRichTextCtrl 的中文內容都變

Post by sishui » Tue Sep 08, 2009 3:21 am

HeMason wrote:好像wx內部使用 UTF-8 當成內定的編碼。
那要怎樣設定才可以看到以前 Ascii 的簡繁體中文檔?
将你的中文 to unicode 再显示在wxRichTextCtrl中试试
work work!!!

HeMason
Experienced Solver
Experienced Solver
Posts: 73
Joined: Tue Jun 30, 2009 10:07 am
Location: Taiwan
Contact:

Re: 使用2.9版後,wxRichTextCtrl 的中文內容都變

Post by HeMason » Tue Sep 08, 2009 3:34 am

sishui wrote: 将你的中文 to unicode 再显示在wxRichTextCtrl中试试
願聞其詳!
「漢書文書處理系統」作者,在這向大家學習。
MyBlog 梅僧山房

closer
In need of some credit
In need of some credit
Posts: 9
Joined: Thu Feb 05, 2009 11:16 am
Location: Taipei, Taiwan

Re: 使用2.9版後,wxRichTextCtrl 的中文內容都變

Post by closer » Tue Sep 22, 2009 4:28 am

HeMason wrote:
sishui wrote: 将你的中文 to unicode 再显示在wxRichTextCtrl中试试
願聞其詳!
我的程式中是用下面的方法將 Big5 的中文轉成 Unicode 的:

Code: Select all

wxCSConv convBig5(wxFONTENCODING_BIG5);

char* big5_string = get_string_from_somewhere();
wxString unicode_string = wxString( big5_string, convBig5);
您可以參考一下。

HeMason
Experienced Solver
Experienced Solver
Posts: 73
Joined: Tue Jun 30, 2009 10:07 am
Location: Taiwan
Contact:

Re: 使用2.9版後,wxRichTextCtrl 的中文內容都變

Post by HeMason » Tue Sep 22, 2009 6:56 am

closer wrote:我的程式中是用下面的方法將 Big5 的中文轉成 Unicode 的
謝謝您!
我會試試看。

原先我以為 wxWidgets 或 wxRichTextCtrl 有什麼設定可以直接改變預設的檔案/字串編碼。恐怕這算盤要落空了。
「漢書文書處理系統」作者,在這向大家學習。
MyBlog 梅僧山房

closer
In need of some credit
In need of some credit
Posts: 9
Joined: Thu Feb 05, 2009 11:16 am
Location: Taipei, Taiwan

Re: 使用2.9版後,wxRichTextCtrl 的中文內容都變

Post by closer » Wed Sep 23, 2009 6:26 am

HeMason wrote: 原先我以為 wxWidgets 或 wxRichTextCtrl 有什麼設定可以直接改變預設的檔案/字串編碼。恐怕這算盤要落空了。
您是使用 wxRichTextCtrl::LoadFile() 嗎?

我手上的程式只用了 wxTextCtrl。
我剛剛 trace 了一下 wxTextCtrl::LoadFile(),發現它使用 wxConvAuto() 轉換檔案的字碼。
因此,若是依下的方法做的話,是可以改變預設的檔案編碼的!

Code: Select all

    wxFontEncoding old_encoding = wxConvAuto::GetFallbackEncoding();
    wxConvAuto::SetFallbackEncoding( wxFONTENCODING_BIG5);
    m_pTextArea->LoadFile( strFilename);
    wxConvAuto::SetFallbackEncoding( old_encoding);
甚至我們以 wxFONTENCODING_SYSTEM 取代 wxFONTENCODING_BIG5 的話,可以讓這個程式依系統目前的語系要以何種編碼讀取檔案。

wxRichTextCtrl 比較複雜,我就沒試了。不過我猜應該大同小異。

希望對您有幫助!

(也感謝您讓我有動機去 trace code,我也多上了一課 :)

HeMason
Experienced Solver
Experienced Solver
Posts: 73
Joined: Tue Jun 30, 2009 10:07 am
Location: Taiwan
Contact:

Re: 使用2.9版後,wxRichTextCtrl 的中文內容都變

Post by HeMason » Wed Sep 23, 2009 6:37 am

closer wrote: 甚至我們以 wxFONTENCODING_SYSTEM 取代 wxFONTENCODING_BIG5 的話,可以讓這個程式依系統目前的語系要以何種編碼讀取檔案。

wxRichTextCtrl 比較複雜,我就沒試了。不過我猜應該大同小異。

希望對您有幫助!

(也感謝您讓我有動機去 trace code,我也多上了一課 :)
原來有這個Function!
我也在台灣,可以互相認識一下。
我拜訪了您的blog,很棒喔!
我這一篇麻煩您看一下:
http://forums.wxwidgets.org/viewtopic.php?t=25394
想聽聽您的建議,或是您是否有意願。
上頭有我的聯絡資料。頗急!
「漢書文書處理系統」作者,在這向大家學習。
MyBlog 梅僧山房

HeMason
Experienced Solver
Experienced Solver
Posts: 73
Joined: Tue Jun 30, 2009 10:07 am
Location: Taiwan
Contact:

Post by HeMason » Fri Oct 02, 2009 3:45 am

這問題還是沒解!

因為我可能讀進不同編碼的檔案,是否要自己偵測,然後降內容轉碼成UTF-8後,再交給 wxRichTextCtrl?
「漢書文書處理系統」作者,在這向大家學習。
MyBlog 梅僧山房

closer
In need of some credit
In need of some credit
Posts: 9
Joined: Thu Feb 05, 2009 11:16 am
Location: Taipei, Taiwan

Post by closer » Fri Oct 02, 2009 8:30 am

HeMason wrote:這問題還是沒解!

因為我可能讀進不同編碼的檔案,是否要自己偵測,然後降內容轉碼成UTF-8後,再交給 wxRichTextCtrl?
對,「自動偵測」這件事可能還是得要自己來。
當然也可以讓使用者自己選擇。
我想到的是可以提供一個預覽視窗,讓使用者看「這樣的解碼結果是否合理」。

另外,若您的使用者一般只開與自己的作業系統語系相同的檔案,
(例如繁中 Windows 使用者只開 big5;簡中使用者只開 GB)
那也許可以考慮使用 wxFONTENCODING_SYSTEM,讓作業系統決定。

HeMason
Experienced Solver
Experienced Solver
Posts: 73
Joined: Tue Jun 30, 2009 10:07 am
Location: Taiwan
Contact:

Post by HeMason » Fri Oct 02, 2009 8:38 am

剛剛看了一下 o-line help,關於:
wxConvAuto::SetFallbackEncoding( wxFONTENCODING_BIG5);

的確,他對 wxFile、wxTextCtrl等有影響,但是對 wxRichTextCtrl 就沒有影響。

試了幾個方法,都沒辦法在wxRichTextCtrl 中顯示 Big-5?
這次的Release 看起來改變還真不小啊!

其實「自動偵測」我有做過,還蠻準的。
但現在是就算我偵測到了,也不能正確顯示,到底要怎麼辦?
頭痛!
「漢書文書處理系統」作者,在這向大家學習。
MyBlog 梅僧山房

Post Reply