任何人都可以提供一個簡單的例子來讀寫Unicode文件中的一個Unicode字符嗎?Unicode文件寫入和C++讀取?
2
A
回答
1
在linux上,我使用非常標準的iconv
(link)庫。一個過於簡單的程序是:
#include <stdio.h>
#include <stdlib.h>
#include <iconv.h>
#define BUF_SZ 1024
int main(int argc, char* argv[])
{
char bin[BUF_SZ];
char bout[BUF_SZ];
char* inp;
char* outp;
ssize_t bytes_in;
size_t bytes_out;
size_t conv_res;
if(argc != 3)
{
fprintf(stderr, "usage: convert from to\n");
return 1;
}
iconv_t conv = iconv_open(argv[2], argv[1]);
if(conv == (iconv_t)(-1))
{
fprintf(stderr, "Cannot conver from %s to %s\n", argv[1], argv[2]);
return 1;
}
bytes_in = read(0, bin, BUF_SZ);
{
bytes_out = BUF_SZ;
inp = bin;
outp = bout;
conv_res = iconv(conv, &inp, &bytes_in, &outp, &bytes_out);
if(conv_res >= 0)
{
write(1, bout, (size_t)(BUF_SZ) - bytes_out);
}
}
iconv_close(conv);
return 0;
}
這是過於簡單的演示轉換。在現實世界中,你通常有兩個嵌套的循環:
- 一個讀數輸入,所以處理時,其超過BUF_SZ
- 一個轉換輸入到輸出。請記住,如果要從ASCII轉換爲UTF-32LE,則每個iunput字節最終都要輸出4個字節。因此,內部循環將通過檢查
conv_res
然後檢查errno
來處理此問題。
0
如果您使用的是Windows。 使用fgetws http://msdn.microsoft.com/en-us/library/c37dh6kf(VS.71).aspx來讀取 和fputws http://msdn.microsoft.com/en-us/library/t33ya8ky(VS.71).aspx來編寫。
示例代碼位於提供的鏈接中。
2
嘗試http://utfcpp.sourceforge.net/。該鏈接提供了一個逐行閱讀utf8文件的入門示例。
相關問題
- 1. 麻煩讀取和寫入文件c#
- 2. 在C++中讀取和寫入文件
- 3. C++ fstream讀取和寫入文件
- 4. 正在讀取和寫入文件C++
- 5. 讀取和寫入文件C++
- 6. 讀取和寫入文件
- 7. 寫入和讀取文件
- 8. C++文件讀取庫 - ANSI和Unicode
- 9. 寫入/讀取文本文件(C#)
- 10. C#app.config讀取和寫入
- 11. 讀取和寫入文本文件
- 12. 在C中讀取(/寫入)文件#
- 13. 從文件讀取和寫入文件的問題C
- 14. C中的文件,訪問指針,讀取和寫入文件
- 15. 讀取文件中的Unicode字符C
- 16. 逐行讀取Unicode文件C++
- 17. 讀取c中的unicode文件
- 18. 在Haskell中讀取和寫入文件
- 19. Python快速讀取和寫入文件
- 20. 從csv文件讀取和寫入
- 21. 讀取和寫入XML文件
- 22. 如何讀取和寫入文件
- 23. 如何讀取和寫入文件
- 24. 同時寫入和讀取文件
- 25. 文件讀取,寫入和保存
- 26. 從plist文件中寫入和讀取
- 27. 使用mex讀取和寫入文件
- 28. 從文件讀取和寫入
- 29. PHP:讀取和寫入Excel文件
- 30. Python:讀取和寫入CSV文件
什麼格式? UTF-8,UTF-16或UTF-32? – 2010-10-11 10:18:23
如果UTF-16是3種可能的UTF-16格式中的哪一種?大端,小端,還是由BOM指定? – 2010-10-11 10:22:38
而且,在哪個平臺上? 'wchar_t'的大小並不是相同的:在Windows上,通常在UTF-16 LE內部存儲字符串,而在UTF-8(帶有'char')或UTF-32('wchar_t')的Linux上。 – 2010-10-11 10:40:27