求助高手:应用里有中文,繁体,韩文,英文还有法文怎么算长度啊?
公司系统通过VB界面录入一些中文,繁体,韩文,英文还有法文,然后保存到ACCESS数据库,保存好的数据最后转换成utf-8编码的TXT文件上传到其他系统,其他系统是按照位来取TXT文件里的数据的.
比如1-4位代表日期,6-10位代表姓,12-18位代表名,20-30代表公司名...
如:
1024 张 三 A公司
1023 李 四 B公司
我们写的算长度的方法对于中文,繁体,韩文,英文时正确,可对法文就不正确了。
部分代码如下:哪位高手可否帮忙看下,万分感谢!~!
'-------------------------------------------------------------------' To calculate simple chinese, korean, traditional chinese and English str length'---------------------------------------------------------------------Private Function LenC(strX As String) As Integer LenC = 0 If Len(strX) = 0 Then Exit Function Dim i As Integer Dim strOneChar As String For i = 1 To Len(strX) strOneChar = Mid(strX, i, 1) If AscW(strOneChar) >= 0 And AscW(strOneChar) <= 255 Then LenC = LenC + 1 ' ENG Else LenC = LenC + 3 'simple chinese, korean, traditional chinese End If Next i End Function'------------------------------------' Check string length' Add space or cut to meet length requirment'------------------------------------Public Function ChkStr(strX As String, iLen As Integer) As String If InStr(strX, vbCrLf) > 0 Or InStr(strX, vbCr) > 0 Or InStr(strX, vbLf) > 0 Then strX = Replace(strX, vbCrLf, "") End If Dim iLenStrX As Integer iLenStrX = LenC(strX) If iLenStrX > iLen Then strX = Space(iLen) End If If iLenStrX < iLen Then strX = strX & Space(iLen - iLenStrX) End If ChkStr = strXEnd Function'---------------------------------------------------------------'Get master info from mdb database'Convert and write to mastMMDD.xxx file'---------------------------------------------------------------Private Sub ProcessMAST(srcFile As String, desFile As String) 。。。 Do While Not rs.EOF strMAST = strMAST & ChkStr(CNull(rs.Fields("MCONT_METH")), 6) strMAST = strMAST & ChkStr(CNull(rs.Fields("MPROJ_CODE")), 6) strMAST = strMAST & ChkStr(CNull(rs.Fields("MACT_CODE")), 3) strMAST = strMAST & ChkStr(CNull(rs.Fields("MLIST_ID")), 8) strMAST = strMAST & ChkStr(CNull(rs.Fields("MCOMP_ID")), 10) strMAST = strMAST & ChkStr(CNull(rs.Fields("MCOMPANY_NAME")), 60) strMAST = strMAST & ChkStr(CNull(rs.Fields("MPER_ID")), 20) sByte = UnicodeToUtf8(strMAST) Put #1, , sByte Put #1, , vbCrLf NextRecord: rs.MoveNext Loop End Sub