| ||||||||
adm | Find | login register |
不知道是哪裡出問題。iconv 的結果錯誤,UTF-16 轉成 UTF-8 只顯示出"中"一個字,應該可以顯示"中文測試"。 麻煩幫忙測測看其他的版本有沒有問題。我的是 GCC 4.2.3 + glibc-2.7-12.2mnb1
#include <stdio.h> edited: 4
| ||||||||||||||
這些 string 應該要用什麼編碼? 我是亂問的 :P,這裡好像有一個例子: http://www.gnu.org/software/libc/manual/html_node/iconv-Examples.html#iconv-Examples
| ||||||||||||||
wchar_t 就是 UTF-16 是因為發現 iconv UTF-16 轉 UTF-8 有問題。我原來是用 GTK 的g_convert,也一樣有問題,因為似乎也是 call iconv。g_convert 我以前用過,所以應該不是使用方式錯誤。 也可能是 GCC 的 UTF-16 string 有問題。可以幫我試一下找出問題嗎? edited: 2
| ||||||||||||||
我用可執行檔 iconv 來轉是沒有問題,所以,應該是有某顆地雷沒有發現? | ||||||||||||||
是轉成 UTF-16 再轉回 UTF-8 嗎?
| ||||||||||||||
是的。 | ||||||||||||||
# ./a.out r:600b60 rn:12 wn:18391ad0:512 程式記憶體區段錯誤 # dmesg
a.out[12964]: segfault at 601000 ip 00007f72f09c6a9b sp 00007fff183918f0 error 4 in UTF-16.so[7f72f09c6000+3000] | ||||||||||||||
可以用 gcc -g compile 後用 gdb 看是當在哪一行嗎? 會搞這個都是那個 M$ 的 Visual Studio C++害的 edited: 2
| ||||||||||||||
gcc iconv.c -fwide-exec-charset=utf-16 -w 我不知道是怎麼回事喔,iconv.c是UTF-8,直接複製貼上。 我本來想說,用iconv 把iconv.c轉成utf16之後, gcc加上 -finput-charset=utf16, 可是這樣連stdio.h之類的都會錯了,因為utf16跟ISO8859不相容。 所以,-finput-charset不知道拿來幹嘛用的...可能是要甚麼都沒有include的獨立檔案才可以用這個flag吧。 | ||||||||||||||
不是這樣弄的,請把 file 存成 UTF-8 來 compile
L 是說把 string 存成 UTF-16,好像是 visual C++ 來的。 wchar_t 就是 wide character,也就是 UTF-16 edited: 2
| ||||||||||||||
有阿,存成utf8 gcc iconv.c -fwide-exec-charset=utf-16 -w 這樣就可以了 | ||||||||||||||
感謝,真的可以了。 這樣看來 GCC 的 wide character default value 還真的有點爛,wide character string 只轉第一個字,造成誤會,比不轉更糟糕。Orz edited: 1
| ||||||||||||||
從wikipedia看來的:Under Win32, wchar_t is 16 bits wide and represents a UTF-16 code unit. On Unix-like systems wchar_t is commonly 32 bits wide and represents a UTF-32 code unit. http://en.wikipedia.org/wiki/Wide_character edited: 1
|
| ||||||||
adm | Find | login register |