我試圖在Linux中使用iconv()將UTF-16LE轉換爲UTF-8。使用iconv()將UTF-16LE轉換爲UTF-8()
,我想它做..
但我得到了一些麻煩..我的代碼..
,我認爲兩個代碼是一樣的,但是第一個沒有工作。只有第二個工作。
#include "stdio.h"
#include "string.h"
#include "iconv.h"
#include "errno.h"
#if 1
int fn2Utf8(char inBuf[], char outBuf[]) {
size_t readBytes = sizeof(inBuf);
size_t writeBytes = sizeof(outBuf);
char* in = inBuf;
char* out = outBuf;
iconv_t convert = iconv_open("UTF-8","UTF-16LE");
if (iconv(convert, &in, &readBytes, &out, &writeBytes) < 0) {
return (-1);
}
iconv_close(convert);
printf("[%s] [%s]\n", inBuf, outBuf);
return (out - outBuf);
}
int main() {
char inBuf[128] ="\x5c\x00\xbd\xac\x01\xc6\x00\xd3\x5c\x00\x00\xb3\x78\xc6\x44\xbe\x5c\x00\x2a\x00\x00\x00";
char outBuf[128];
fn2Utf8(inBuf, outBuf);
return 0;
}
#else
int main() {
char inBuf[128] = "\x5c\x00\xbd\xac\x01\xc6\x00\xd3\x5c\x00\x00\xb3\x78\xc6\x44\xbe\x5c\x00\x2a\x00\x00\x00";
char outBuf[128];
size_t readBytes = sizeof(inBuf);
size_t writeBytes = sizeof(outBuf);
char* in = inBuf;
char* out = outBuf;
iconv_t convert = iconv_open("UTF-8","UTF-16LE");
if (iconv(convert, &in, &readBytes, &out, &writeBytes) < 0) {
return (-1);
}
iconv_close(convert);
printf("[%s] [%s]\n", inBuf, outBuf);
return 0;
}
#endif
可以complie 2種類型的代碼與如果0 - >如果1
,我需要如果1種方法。
只是說「它不工作」並不是一個很好的問題描述。 ***如何***不起作用?它不是建立?跑步時你會碰撞嗎?意外的結果?請詳細說明!請花一些時間[閱讀如何提出好問題](http://stackoverflow.com/help/how-to-ask)。 –
@Someprogrammerdude這個問題是意想不到的結果。我嘗試閱讀。謝謝 – hybang