VB 读文件 ANSI,该怎么解决
VB 读文件 ANSI
我在用VB读lrc文件,内容含中文,鉴于vb以unicode形式存字符,显示出的都是乱码,求解决方案。代码附上,不要直接回答什么Strconv() ,无效。LCID都改过了还是没用。
添加timer控件,interval=1000。添加Label,Listbox。
lrc保存为ansi文件就可以了,但是unicode的lrc读不了。
------解决方案--------------------
Unicode(Little Endian)文本文件转换为Ansi纯文本文件(参见里面函数ULEToAnsi,可自动判断文件头是否是FFFE):
http://blog.csdn.net/chenjl1031/article/details/6059767
我在用VB读lrc文件,内容含中文,鉴于vb以unicode形式存字符,显示出的都是乱码,求解决方案。代码附上,不要直接回答什么Strconv() ,无效。LCID都改过了还是没用。
添加timer控件,interval=1000。添加Label,Listbox。
lrc保存为ansi文件就可以了,但是unicode的lrc读不了。
- VB code
Option Explicit '处理LRC歌词 Dim LrcText(0 To 6000) As String 'LRC歌词按s存放在数组中 e.g.第02:05的歌词存放在 LrcText(125)中 //60 * 02 + 05 = 125 Public SongName As String, Singer As String, Album As String, Editor As String Public LrcOffset As Double Dim t As Integer Public Function LyricsAlalysys(FilePath As String) As Boolean 'LRC歌词分析函数 Dim LrcLine() As String Dim Data As String, e As Long Dim nFile As Long: nFile = FreeFile Open FilePath For Input As nFile Do While (Not EOF(nFile)) Line Input #1, Data If Trim(Data) <> Empty Then e = e + 1 ReDim Preserve LrcLine(e) LrcLine(e) = Trim(Data) End If Loop Close nFile For e = 1 To UBound(LrcLine) Select Case Mid(UCase$(LrcLine(e)), 1, 4) Case "[TI:": SongName = (Mid(LrcLine(e), 5, Len(LrcLine(e)) - 5)) Case "[AR:": Singer = (Mid(LrcLine(e), 5, Len(LrcLine(e)) - 5)) Case "[AL:": Album = (Mid(LrcLine(e), 5, Len(LrcLine(e)) - 5)) Case "[BY:": Editor = (Mid(LrcLine(e), 5, Len(LrcLine(e)) - 5)) Case "[OFF": LrcOffset = CLng((Mid(LrcLine(e), 9, Len(LrcLine(e)) - 9))) / 1000 Case Else RecordLyric (LrcLine(e)) End Select Next '[offset:0]——补偿时值。500=0.5秒,正负值分别提前和延长相应的时间 End Function Private Function RecordLyric(Lrc As String) On Error Resume Next Dim Lyric As String, Time As String Dim adTime As String Dim min As Long, sec As Long Lyric = Mid(Lrc, InStrRev(Lrc, "]") + 1) ' StrConv(..., vbFromUnicode, &H804) Time = Mid(Lrc, 1, InStrRev(Lrc, "]")) Do Until InStr(1, Time, "[") = 0 adTime = Mid(Time, 1, InStr(1, Time, "]")) Time = Replace(Time, adTime, Empty) adTime = Mid(adTime, 2, Len(adTime) - 2) min = CLng(Mid(adTime, 1, InStr(1, adTime, ":") - 1)) sec = CLng(Mid(adTime, InStr(1, adTime, ":") + 1) - LrcOffset) If min >= 0 And min < 100 And _ sec >= 0 And sec < 60 Then LrcText(min * 60 + sec) = IIf(Lyric = Empty, "---Lyric Live!---", Lyric) Loop End Function Private Sub Form_Load() t = 0 LyricsAlalysys ("t.lrc") End Sub Private Sub Timer1_Timer() Label1.Caption = SongName & Singer & Album & Editor & LrcOffset List1.AddItem LrcText(t) t = t + 1 End Sub
------解决方案--------------------
Unicode(Little Endian)文本文件转换为Ansi纯文本文件(参见里面函数ULEToAnsi,可自动判断文件头是否是FFFE):
http://blog.csdn.net/chenjl1031/article/details/6059767