3
這發生在OS X上,儘管我懷疑它適用於任何UNIX-y操作系統。 我有一個看起來像這樣兩個字符串:8位範圍以外的字符上的swprintf扼流圈
const wchar_t *test1 = (const wchar_t *)"\x44\x00\x00\x00\x73\x00\x00\x00\x00\x00\x00\x00"; const wchar_t *test2 = (const wchar_t *)"\x44\x00\x00\x00\x19\x20\x00\x00\x73\x00\x00\x00\x00\x00\x00\x00";
在調試程序,test1的樣子「DS」和TEST2看起來像「D的」(與花撇號)。然後我打電話給這個代碼:
wchar_t buf1[100], buf2[100]; int ret1 = swprintf(buf1, 100, L"%ls", test1); int ret2 = swprintf(buf2, 100, L"%ls", test2);
第一個swprintf調用工作正常。第二個返回-1(並且緩衝區不變)。
我猜這個問題與語言環境有關,但是用谷歌搜索並沒有提供任何有用的東西。這是重現我所看到的問題的最簡單方法。我真正感興趣的是vswprintf(),但我認爲這是密切相關的。
爲什麼swprintf阻塞8位範圍之外的unicode字符? 有沒有辦法解決這個問題?
這似乎工作,謝謝。所以...讓我們看看我是否理解這裏發生了什麼。 OS X的缺省語言環境是C,這意味着它使用的ANSI字符集與Basic Latin相同。該捲曲撇號在ANSI中不可表達,因此字符串方法拒絕處理它。通過切換到可以表示任何Unicode字符的語言環境,字符串方法開始工作。 – mhenry1384 2010-06-21 15:46:04