| adm | Find | login register |
eliu joined: 2007-08-09 posted: 11482 promoted: 617 bookmarked: 187 新竹, 台灣 |
不知道是哪裡出問題。iconv 的結果錯誤,UTF-16 轉成 UTF-8 只顯示出"中"一個字,應該可以顯示"中文測試"。 麻煩幫忙測測看其他的版本有沒有問題。我的是 GCC 4.2.3 + glibc-2.7-12.2mnb1
#include <stdio.h> edited: 4
| ||||||||||
本人已不在此站活動 joined: 2007-09-19 posted: 4946 promoted: 325 bookmarked: 206 歸隱山林 |
這些 string 應該要用什麼編碼? 我是亂問的 :P,這裡好像有一個例子: http://www.gnu.org/software/libc/manual/html_node/iconv-Examples.html#iconv-Examples
| ||||||||||
eliu joined: 2007-08-09 posted: 11482 promoted: 617 bookmarked: 187 新竹, 台灣 |
wchar_t 就是 UTF-16 是因為發現 iconv UTF-16 轉 UTF-8 有問題。我原來是用 GTK 的g_convert,也一樣有問題,因為似乎也是 call iconv。g_convert 我以前用過,所以應該不是使用方式錯誤。 也可能是 GCC 的 UTF-16 string 有問題。可以幫我試一下找出問題嗎? edited: 2
| ||||||||||
本人已不在此站活動 joined: 2007-09-19 posted: 4946 promoted: 325 bookmarked: 206 歸隱山林 |
我用可執行檔 iconv 來轉是沒有問題,所以,應該是有某顆地雷沒有發現?
| ||||||||||
eliu joined: 2007-08-09 posted: 11482 promoted: 617 bookmarked: 187 新竹, 台灣 |
是轉成 UTF-16 再轉回 UTF-8 嗎?
| ||||||||||
本人已不在此站活動 joined: 2007-09-19 posted: 4946 promoted: 325 bookmarked: 206 歸隱山林 |
是的。
| ||||||||||
guest |
# ./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] | ||||||||||
eliu joined: 2007-08-09 posted: 11482 promoted: 617 bookmarked: 187 新竹, 台灣 |
可以用 gcc -g compile 後用 gdb 看是當在哪一行嗎? 會搞這個都是那個 M$ 的 Visual Studio C++害的 edited: 2
| ||||||||||
企鵝狂 joined: 2008-04-01 posted: 185 promoted: 20 bookmarked: 7 |
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吧。 | ||||||||||
eliu joined: 2007-08-09 posted: 11482 promoted: 617 bookmarked: 187 新竹, 台灣 |
不是這樣弄的,請把 file 存成 UTF-8 來 compile
L 是說把 string 存成 UTF-16,好像是 visual C++ 來的。 wchar_t 就是 wide character,也就是 UTF-16 edited: 2
| ||||||||||
企鵝狂 joined: 2008-04-01 posted: 185 promoted: 20 bookmarked: 7 |
有阿,存成utf8 gcc iconv.c -fwide-exec-charset=utf-16 -w 這樣就可以了 | ||||||||||
eliu joined: 2007-08-09 posted: 11482 promoted: 617 bookmarked: 187 新竹, 台灣 |
感謝,真的可以了。 這樣看來 GCC 的 wide character default value 還真的有點爛,wide character string 只轉第一個字,造成誤會,比不轉更糟糕。Orz edited: 1
| ||||||||||
ychao joined: 2007-10-25 posted: 298 promoted: 21 bookmarked: 3 |
從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 |