[問題] 跨平台Unicode寫法??
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
gcc 3.4.4 on cygwin
gcc 4.??(最新版) on mingw32 under cygwin(specs中有-lmsvcrt)
gcc 4.??(最新版) on Linux
WinXP,Ubuntu 10.04+
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
NULL
問題(Question):
我想寫一個程式可以讀寫unicode的文字檔,且其內部處理也用Unicode。
他需要能跨平台。
這幾天沒有Linux可測試,暫時是用cygwin,分別跑FLAG 沒有/有 "-mno-cygwin"
code:原始碼皆是由UTF-8無BOM,CRLF儲存
ori.c::最一般的版本
#include<stdio.h>
int main()
{
FILE *f=fopen("ori.txt","w");
fputs("我\n",f);
fclose(f);
return 0;
}
command:
gcc -mno-cygwin ori.c -o ori.exe
result:UTF-8無BOM(又如果我要寫成big5格式呢??)
我<CRLF>
這是我要的結果沒錯,可是跟下面兩個有甚麼差別??
有用UNICODE和沒用UNICODE要怎麼分辨??
tchar.c::
#include<tchar.h>
#include<stdio.h>
//上面兩行順序有差嗎??
int main()//這裡需要用_tmain嗎??
{
FILE *f=_tfopen(_T("tchar.txt"),_T("w"));
_fputts(_T("我\n"),f);
fclose(f);
return 0;
}
command:
gcc -mno-cygwin tchar.c -o tchar.exe
result:
(同上)
command:
gcc -mno-cygwin -D_UNICODE tchar.c -o tchar.exe
result:
(空檔案,錯誤)
(用_tmain會噴libmingw32.a ... in main() ... undefuined ref...to `_WinMain@16`)
wchar.c::
#include<stdio.h>
int main()
{
FILE *f=_wfopen(L"wchar.txt",L"w");
fputws(L"我\n",f);
fclose(f);
return 0;
}
command:
gcc -mno-cygwin wchar.c -o wchar.exe
result:
(空檔案,錯誤)
(若把maine改成wmain也會噴`_WinMain@16`)
[若把main改成WinMain]->
(空檔案,噴waring:resolving _WinMain@16 by linking to _WinMain)
有幾個問題請教::
1.用tchar.c不加-D_UNICODE是否完全等於ori.c??
反之,加了-D_UNICODE是否全等於wchar.c??
2.用ori.c就已經是utf8(unicode)了,為何還需要TCHAR等#define _UNICODE?
而且事實上用了反而無結果??
是因為我系統本身就是XP(unicode)嗎??
>>若是,何時才用得到TCHAR??(難道是UTF8和Unicode的區別??)
3.為何wchar.c會錯誤??
我研究好一段時間了還是不大懂...
上面都是使用-mno-cygwin,下面直接用gcc XXX.c -o XXX.exe
ori.c::
result:UTF-8無BOM
我<LF>
tchar.c::
找不到tchar.h,畢竟這是windows才有的。
wchar.c::
找不到_wfopen(),windows only.
所以所謂的使用UNICODE是指甚麼??
Win上跟Linux上寫法有甚麼差異??
(Win上的部分是否可以直接用cygwin下加-mno-cygwin來模擬??
Linux上的部分是否可用cygwin(POSIX)直接模擬??)
以上我有誤解哪些部份嗎??
另外,有沒有推薦的open-source軟體是有ANSI/Unicode雙版本而且可以跨平台的??
這樣我可以直接參考它的原始碼??
先謝過眾板友~
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.116.103.83
→
02/23 00:29, , 1F
02/23 00:29, 1F
推
02/23 04:03, , 2F
02/23 04:03, 2F
→
02/23 04:36, , 3F
02/23 04:36, 3F
→
02/23 09:18, , 4F
02/23 09:18, 4F
→
02/23 09:18, , 5F
02/23 09:18, 5F
→
02/23 09:19, , 6F
02/23 09:19, 6F
→
02/23 10:52, , 7F
02/23 10:52, 7F
→
02/23 10:52, , 8F
02/23 10:52, 8F
→
02/23 10:54, , 9F
02/23 10:54, 9F
→
02/23 13:07, , 10F
02/23 13:07, 10F
→
02/23 13:29, , 11F
02/23 13:29, 11F
→
02/23 13:51, , 12F
02/23 13:51, 12F
→
02/23 13:51, , 13F
02/23 13:51, 13F
→
02/23 15:40, , 14F
02/23 15:40, 14F
→
02/23 15:41, , 15F
02/23 15:41, 15F
→
02/23 22:30, , 16F
02/23 22:30, 16F
→
02/26 20:36, , 17F
02/26 20:36, 17F