2012年4月23日 星期一

可讀取 Unicode 檔案的 wifstreambuf

因發現 wifstream 不能用 Unicode 檔名,覺得太不方便了,所以寫了以下這個 class,但後來發現 gcc 的 wifstream/wistream 也沒辦法處理 Unicode 文字為內容的檔案,wifstream/wistream 只是虛有其名,所以計畫放棄了。

改用 vs2008 來做,vs2008 的 wifstream 可以使用 Unicode 的檔名,但 wifstream 仍不能讀取 Unicode 的文字內容,不過用 wistream 配合以下的 class 卻成功了。

經網友 ice_emissary(燃燒的大地) 提醒是 Unicode BOM 檔頭的問題,修改後果然成功。

另外 wifstream 應該只是用來讀取 ansi 的檔案,只不過會自動轉型成 wchar_t 來使用


以下參考資料的連結
http://www.cplusplus.com/reference/iostream/streambuf/
http://oopweb.com/CPP/Documents/CPPAnnotations/Volume/cplusplus20.html
http://www.diybl.com/course/3_program/c++/cppjs/200822/98427.html
http://www.dreamincode.net/code/snippet2499.htm

以下是 wifstreambuf.h 的內容,只是一個 .h 檔

2012年4月20日 星期五

google+ 要砍我了

google+ 說我名字違反他們的命名政策,要停用我的 google+,但我的名字早在 google+ 出現之前就已經在使用了,命名政策不是有為此提供例外處理嗎?在 google 搜尋找 cxxlman 就找得到證據了,我找不到申訴連結,曾用過一次但忘了,麻煩 google+ 的管理大大看到請高抬貴手

2012年4月15日 星期日

WinXP+gcc 編譯 wxWidgets

網路上一堆秘笈,搞得我快吐血,結果正確的解答是要選對 gcc 的版本,太新的編譯不出來,不過舊版的也不易找到,我是用 Code::Blocks 8.02 內附的 gcc 3.4.5。

我採用的 wxWidgets 為 2.8.11 版,到 http://www.wxwidgets.org/downloads/ 抓 all wxWidgets ports 中的 zip 檔,將它解壓到 C:\,資料夾名稱為 wxWidgets-2.8.11


2012年4月14日 星期六

C++ 程式編譯之字串

當使用 C 的 printf() 或 C++ 的 cout 秀出文字運作原來相當簡單,就是直接把執行程式內存放的字串字碼丟給系統處理就是了,只要字碼正確就會看到正確的字形在 Console 視窗秀出來。

但這個正確的字碼是怎麼產生的?看看以下這個測試程式,請用記事本編寫比較方便,隨後會做不同的編碼存檔。

#include <iostream>
using namespace std;

int main()
{
  const char *ansi_str1 = "中文";

  cout << "ansi_str1 = " << ansi_str1 << endl;
  return 0;
}

將之存成 ANSI 編碼格式,檔名為 test.cpp,我用 gcc 4.6.2 進行

2012年4月13日 星期五

[轉貼]字元集

轉貼自 http://tw.group.knowledge.yahoo.com/m-c/listitem/view?iid=106
----------------------------------------------------------------------------
Multi-Byte Character

1990年代行銷全球的作業系統 Windows 必須面對混亂的問題。微軟的做法就是提供不同的內碼表(code page),到底一個碼要代表哪一個字符,就要看該環境採用哪一個內碼表。相信大家應該都有這樣的經驗:開啟了一份怪里怪氣的網頁、電子郵件,然後瘋狂的從十幾種內碼表當中猜測到底該用哪一個。