VS2010环境下对UTF8编码的文本文件的读取跟显示
VS2010环境下对UTF8编码的文本文件的读取和显示
由于该文本文件为UTF8,现需要读取该文件,并将内容显示在对话框上面,以方便查看。目前已经将该文件内容读取在内存中并且内容正常,但是显示在界面上有乱码。。。
------解决思路----------------------
仅供参考,尽管是VB6:
------解决思路----------------------
如果你的工程是Unicode工程,可以转换为Unicode字符串再显示
------解决思路----------------------
fopen时,有没有用ccs指定编码为UTF-8?
fopen("newfile.txt", "rw, ccs=<encoding>");
由于该文本文件为UTF8,现需要读取该文件,并将内容显示在对话框上面,以方便查看。目前已经将该文件内容读取在内存中并且内容正常,但是显示在界面上有乱码。。。
------解决思路----------------------
仅供参考,尽管是VB6:
Private Declare Function MultiByteToWideChar Lib "kernel32" (ByVal CodePage As Long, ByVal dwFlags As Long, ByRef lpMultiByteStr As Any, ByVal cchMultiByte As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long) As Long
Private Declare Function WideCharToMultiByte Lib "kernel32" (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long, ByRef lpMultiByteStr As Any, ByVal cchMultiByte As Long, ByVal lpDefaultChar As Long, ByVal lpUsedDefaultChar As Long) As Long
'常用的代码页:
const cpUTF8 =65001
const cpGB2312 = 936
const cpGB18030=54936
const cpUTF7 =65000
Function MultiByteToUTF16(UTF8() As Byte, CodePage As Long) As String
Dim bufSize As Long
bufSize = MultiByteToWideChar(CodePage, 0&, UTF8(0), UBound(UTF8) + 1, 0, 0)
MultiByteToUTF16 = Space(bufSize)
MultiByteToWideChar CodePage, 0&, UTF8(0), UBound(UTF8) + 1, StrPtr(MultiByteToUTF16), bufSize
End Function
Function UTF16ToMultiByte(UTF16 As String, CodePage As Long) As Byte()
Dim bufSize As Long
Dim arr() As Byte
bufSize = WideCharToMultiByte(CodePage, 0&, StrPtr(UTF16), Len(UTF16), 0, 0, 0, 0)
ReDim arr(bufSize - 1)
WideCharToMultiByte CodePage, 0&, StrPtr(UTF16), Len(UTF16), arr(0), bufSize, 0, 0
UTF16ToMultiByte = arr
End Function
Private Sub Command1_Click()
MsgBox MultiByteToUTF16(UTF16ToMultiByte("ab中,c", cpUTF8), cpUTF8)
End Sub
------解决思路----------------------
如果你的工程是Unicode工程,可以转换为Unicode字符串再显示
CStringW UTF8ToUTF16(LPCSTR szUTF8)
{
DWORD nWszLen = MultiByteToWideChar(CP_UTF8, NULL, szUTF8, -1, NULL, NULL);
CStringW strUTF16;
nWszLen = MultiByteToWideChar(CP_UTF8, NULL, szUTF8, -1, strUTF16.GetBuffer(nWszLen), nWszLen);
strUTF16.ReleaseBuffer();
return strUTF16;
}
------解决思路----------------------
fopen时,有没有用ccs指定编码为UTF-8?
fopen("newfile.txt", "rw, ccs=<encoding>");