首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

高手:应用里有中文,繁体,韩文,英文还有法文如何算长度啊

2012-04-12 
求助高手:应用里有中文,繁体,韩文,英文还有法文怎么算长度啊?公司系统通过VB界面录入一些中文,繁体,韩文,

求助高手:应用里有中文,繁体,韩文,英文还有法文怎么算长度啊?
公司系统通过VB界面录入一些中文,繁体,韩文,英文还有法文,然后保存到ACCESS数据库,保存好的数据最后转换成utf-8编码的TXT文件上传到其他系统,其他系统是按照位来取TXT文件里的数据的.
比如1-4位代表日期,6-10位代表姓,12-18位代表名,20-30代表公司名...
如:
1024 张 三 A公司
1023 李 四 B公司

我们写的算长度的方法对于中文,繁体,韩文,英文时正确,可对法文就不正确了。
部分代码如下:哪位高手可否帮忙看下,万分感谢!~!

VB code
'-------------------------------------------------------------------' 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


测试数据如下:
上海CE MODÈLE A ÉTÉ (测试发现:该字段后面的字段被挪后3个位置)
CE MODÈLE A ÉTÉ AJOUTÉ À VOTRE ÉCRIN (测试发现:该字段后面的字段被挪后6个位置)



[解决办法]
提供一个非常规方法,就是按指定格式写到一个临时文件中,然后读取文件大小。
[解决办法]
法文的话,要有法文环境才行,否则会乱码。

[解决办法]
UnicodeToUtf8() 内部不是已经有长度了,将它作为参数传出去。

热点排行
Bad Request.