任何人都可以提供一個簡單的例子來讀寫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中的文件讀取和寫入
- 4. C++ fstream讀取和寫入文件
- 5. 麻煩讀取和寫入文件c#
- 6. C:同時讀取和寫入文件
- 7. 無法讀取和寫入文件C
- 8. 在C++中讀取和寫入文件
- 9. 讀取和寫入文件C++
- 10. C++文件讀取庫 - ANSI和Unicode
- 11. 讀取和寫入文件
- 12. 讀取和寫入文件
- 13. 讀取和寫入文件
- 14. 寫入和讀取文件
- 15. 讀取文件並寫入文件C
- 16. 讀/寫unicode C++
- 17. 使用讀取(...)讀取和寫入C文件(...)
- 18. 寫入/讀取文本文件(C#)
- 19. C#app.config讀取和寫入
- 20. c#NetworkStream寫入()和讀取()
- 21. 讀取unicode文件
- 22. 讀取和寫入文本文件
- 23. Java - 讀取和寫入文本文件
- 24. 讀取寫入文件中C++
- 25. 在c中讀取/寫入bmp文件
- 26. C#讀取/寫入.xlsm文件
- 27. 在C中讀取(/寫入)文件#
- 28. 用c從/中讀取/寫入文件
- 29. C中的文件,訪問指針,讀取和寫入文件
- 30. 從文件讀取和寫入文件的問題C
什麼格式? 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