读TXT文件,读出的中文都是乱码,请高手来解决!!!!!!!!!
我的VB打的是SP6补丁,TXT文件中的一行是
"1 新华南园1号101室 6 6 020060111"
而我line input出来的却是
"1 鏂板崕鍗楀洯1鍙?01瀹? 6 6 020060111"
我读别的TXT文件都可以显示中文,就读这个TXT文件出现乱码,请高手帮忙解决一下,谢谢了!!!
问题点数:50、回复次数:15Top
1 楼vansoft(Vansoft Workroom)回复于 2006-01-16 13:53:27 得分 0
把这个文件另存一下,保存的文件格式重新设置一下。Top
2 楼zou19820704(天下英雄)回复于 2006-01-16 13:59:43 得分 0
不明白Top
3 楼glc20022003(哈哈)回复于 2006-01-16 14:00:37 得分 0
To:vansoft(Vansoft Workroom
关键是这个文件是别人电脑软件自动生成的,我要每次都要把里面字符串里的值解析出来写到自己的SQL数据库中去.还有别的好的方法吗???Top
4 楼faysky2(出来混,迟早是要还嘀)回复于 2006-01-16 14:01:40 得分 5
这样试试:
Private Sub Command1_Click()
Const fPath As String = "c:\temp.txt"
Dim strTemp As String, fLen As Long
fLen = fileLen(fPath)
strTemp = Space(fLen)
Open fPath For Binary As #1 Len = fLen
Get #1, 1, strTemp
Close #1
Debug.Print strTemp
End SubTop
5 楼zou19820704(天下英雄)回复于 2006-01-16 14:07:09 得分 0
2进制的话,字节不好控制!!
除非文件每行固定是5段
每段字节一定,用2进制好用Top
6 楼glc20022003(哈哈)回复于 2006-01-16 14:26:32 得分 0
我刚才查了一下,文本文件是UTF-8格式的.有没有什么方法可以转换成ANSI格式的,或者就把这个文件另存到别的文件夹下,把格式改成ANSI格式的.Top
7 楼glc20022003(哈哈)回复于 2006-01-16 17:15:01 得分 0
没有人呢吗??自己顶一下,大家帮帮忙啊.Top
8 楼rainstormmaster(暴风雨 v2.0)回复于 2006-01-16 20:25:06 得分 0
http://community.csdn.net/Expert/TopicView2.asp?id=4177260Top
9 楼rainstormmaster(暴风雨 v2.0)回复于 2006-01-16 20:46:21 得分 30
一个按钮,一个多行文本框:
Option Explicit
Private Sub Command1_Click()
Dim objStream As Object
Set objStream = CreateObject("ADODB.Stream")
With objStream
.Type = 2
.Mode = 3
.Open
.LoadFromFile "e:\mc3.txt"
.Position = 0
.Charset = "UTF-8" ' 或 "Big5" 或其他編碼
Text1.Text = .ReadText
' PS : 也可透過 .SaveToFile 方法把檔案存檔
.Close
End With
Set objStream = Nothing
End Sub
Top
10 楼kingofbird(雪鹰)回复于 2006-01-17 09:19:55 得分 0
把你读到的数据用 StrConv 函数处理一下就可以了Top
11 楼glc20022003(哈哈)回复于 2006-01-17 10:24:30 得分 0
strConv()函数不支持UTF-8的.
有没有什么方法把UTF-8格式的文挡改存为ANSI格式的文挡
然后我再处理.
用了rainstormmaster(暴风雨 v2.0) 的方法,的确可以读出UTF-8文件,
我用str = objStream.ReadText把读出的文件内容放入变量str,然后写入自己新建的文本,却在文本的开始和结尾莫名的多了两个双引号.
如果没有别的好的解决方法,我只有在程序中处理这个双引号了.Top
12 楼iambluebird(胡搅蛮缠)回复于 2006-01-17 10:33:16 得分 15
二进制的,要转换一下,ANSI应该不行吧,转到UCS-2就可以正确显示了,下面是我写的 一个UTF8到UCS2的转换函数.
Public Function UTF8ToString(ByRef aUTF8() As Byte) As String
'-----------------------------------------------
'Function Name: UTF8ToString
'Return Type: String
'Parameter List:
' - aUTF8() Byte:
'Describe:
'-----------------------------------------------
'Code By: Ouyang Feng
'DateTime: 2006-01-10
'Version: 1.00
'-----------------------------------------------
'Edit(1) -
' Code By:
' DateTime:
' Version:
'-----------------------------------------------
On Error GoTo REERR:
'* Note: Add code at here!
Dim strResult As String '用于存储文字结果
Dim aChar() As Byte '用于存储UCS-2的编码
Dim lpReadPoint As Long '用于分析UTF-8数组的指针变量
Dim strWORD As String '去掉UTF-8的Hex部分之后剩余的二进制字符串数据
Dim lngUCSByteCount As Long '存储UCS-2编码的数组长度
Dim lngUTFByteCount As Long '存储UTF-8编码的数组长度
Dim lpUTF8Point As Long '单个文字UTF8编码分析中使用的指针
Dim strTemp As String '每个字节的二进制编码
Dim intHexBegin As Integer 'Hex的开始位置
Dim lpUCSPoint As Long '填充UCS编码数据时所使用的指针
'获取UTF-8编码的字节长度,作为循环上限
lngUTFByteCount = UBound(aUTF8)
'将分析指针置0
lpReadPoint = 0
'循环解码,当分析指针到达并超过循环上界时退出
Do Until lpReadPoint > lngUTFByteCount
'获取下一个文字的UTF-8编码Hex数据
strTemp = Format(ZH10to2(aUTF8(lpReadPoint)), C_EJZFORMAT_8)
intHexBegin = InStr(1, strTemp, "0")
'如果第一位就是0,则表示这是一个与ACSII码相同的编码,否则,是一个2字节的编码
If intHexBegin = 1 Then
'在这种情况下,字符存储只占用了一个字节,直接获取
strResult = strResult & Chr(aUTF8(lpReadPoint))
'移动指针到下一个字节
MovePoint lpReadPoint
Else
'当开始位不为0时,表示这个编码使用了超过1个字节的长度来存储
'这个时候使用一个循环提取出所有属于当前文字的编码并采取反序
'重组的方式获得其Unicode编码
'首先获得UTF编码占据的字节空间长度,就是0开始的位置减去1,获得
'开始"1"的个数
lngUCSByteCount = intHexBegin - 1
'循环分析所有属于该文字编码的字节
For lpUTF8Point = 0 To lngUCSByteCount - 1
strTemp = Format(ZH10to2(aUTF8(lpReadPoint)), C_EJZFORMAT_8)
strWORD = strWORD & Right(strTemp, 8 - InStr(1, strTemp, "0"))
MovePoint lpReadPoint
Next
'将strWord的长度以0在之前填充为8的倍数
Do Until Len(strWORD) Mod 8 = 0
strWORD = "0" & strWORD
Loop
'获得文字UCS编码所占用的字节长度
lngUCSByteCount = Len(strWORD) / 8
'将lngUCSByteCount强制转换为2的倍数,因为最前面的8位肯定为“0”
If lngUCSByteCount = 3 Then lngUCSByteCount = 2
If lngUCSByteCount = 5 Then lngUCSByteCount = 4
'开辟文字UCS编码存储所占用的字节空间
ReDim aChar(lngUCSByteCount - 1)
'填充UCS编码数据
'反顺填充,strWord中的高位数据填充到aChar的低位
For lpUCSPoint = 0 To lngUCSByteCount - 1
aChar(lpUCSPoint) = ZH2to10(Mid(strWORD, (lngUCSByteCount - 1 - lpUCSPoint) * 8 + 1, 8), 0)
Next
'将文字数据追加到结果变量中
strResult = strResult & CStr(aChar)
'清空strWord数据,等待下一次循环
strWORD = ""
End If
Loop
'*Note:The function's Return value,must edit it!
UTF8ToString = strResult '/must be edit!
PORC_EXIT:
'*Note: Add exit code at here! Distory all parameters at here!
Exit Function
REERR:
'*Note:The function's Return value When an error,must edit it!
UTF8ToString = "" '/must be edit!
' Call BugAssert(C_ERROR_UNICODE_UTF8TOUCS2, C_ERROR_UNICODE_UTF8TOUCS2DE, "cls_UTF8.UTF8ToString()")
End FunctionTop
13 楼iambluebird(胡搅蛮缠)回复于 2006-01-17 10:34:50 得分 0
上面的函数支持UTF-8到UCS-2和UCS-4的转换,不过在VB下似乎只支持UCS-2的直接显示Top
14 楼iambluebird(胡搅蛮缠)回复于 2006-01-17 10:38:04 得分 0
ZH10TO2(lngValue as Long) as string 函数是将10进制转换为2进制的函数
MovePoint (pPoint as long [,optional moveStep as long = 1] ) as boolean
是将指针移位的函数,类似于pPoint=pPoint+moveStepTop
15 楼glc20022003(哈哈)回复于 2006-01-17 11:17:43 得分 0
谢谢各位了,给分!!Top




