我在做了一个基督教大词典的电子查询,但是遇到一点问题,数据库中的一些拉丁文不能正常的显示出来。如果遇到拉丁文,它就会以一个问号代替显示。请问如何解决。代码一般都和以下差不多,但如果objRS("内容")中有拉丁文,则Text1.text的相应部分就会以“?”代替相应的拉丁文。
  
    objRS.Open "select 内容 from christDic where 中文词条='" & Node.Text & "'", objConn, adOpenStatic, adLockOptimistic, adCmdText
        
        Do While Not objRS.EOF
            'MsgBox TypeName(objRS("内容"))
            Text1.Text = objRS("内容")
            objRS.MoveNext
        Loop
        Set objRS = Nothing

拉丁文点这里www.bigyi.net/christ.zip中的表christDic.另外在treeview控件,combox控件中也都存在同样的问题。我在金山词霸上试着输入一个拉丁文,结果是不行的。但在所有微软的记事本,写字版上却都可显示。后来我又改用richbox,但也不行。请问这种问题如何解决。

解决方案 »

  1.   

    对cuizm(射天狼)说:
    数据库里是unicode字符集啊,问题是遇到了拉丁文就不能正常显示了。
    我想微软能解决,应该是有办法的啊。
      

  2.   

    对 ch21st(风尘鸟)说:
    我用过的StrConv(objrs("内容"),vbunicode),越用越乱。
      

  3.   

    对 lxcc(虫莲)说:
    听不太懂,能不能说详细点。
    我在word,记事本、写字板里都能显示拉丁文的。这说明相应字库已经安装了,我是这样理解的。
      

  4.   

    word、记事本、写字板你不都是粘贴进去的吗,其实你从WORD或者记事本里把这些字符拷贝到RICHTEXTBOX控件里也能正常显示的(只是编程赋值不行),我想还是字符集的问题,StrConv转换不可以,要不跟不转换一样,要不就是更乱的字符~~
      

  5.   

    对cuizm(射天狼)说:
    我刚试了一下把数据库里这些字符拷贝到RICHTEXTBOX控件里,不能正常显示。
    “在VB中的转换时用的字符集”这个能设定吗?我要的是正常显示,总不见得不能实现吧!以前我要把数据导入到数据库也碰到过类似的问题,后来也解决了。
    '***********************************
        'Sub/Function: 返回索引结果
        '
        'Arguments: pstrSearch
        '
        'return:索引结果
        '
        'Re:
        '
        'Programmer:zhangyi
        '
        'History:created 9/3/2002
        '
        'Copyright 2002,zhangyi
    '***********************************
    Function funcInsertChrist(pdblNumber, strFile)
        Dim strFile As String
        Dim objFileSystemObject As New FileSystemObject
        Dim objTextStream As TextStream
        Dim strLine As String
        Dim strALLHTML As String
        Dim intcount As Integer
        Dim intStartPosition As Integer
        Dim intEndPosition As Integer
        Dim strSmallTitle As String
        Dim intLen As Integer
        Dim objRS As New ADODB.Recordset
        Dim objConn As New ADODB.Connection
        Dim strSQL As String
        Dim strA As String
        Dim strB As String
        Dim strEnglishName As String
        Dim strYear As String
        
        '使用 CreateObject 方法创建 FileSystemObject 对象 objFileSystemObject
        Set objFileSystemObject = CreateObject("Scripting.FileSystemObject")
        '校验函数所在位置
        
        '数据库连接
        objConn.Open gstrConn
        '判断该文件是否存在
        If objFileSystemObject.FileExists(strFile) = True Then
            '打开文件
            Set objTextStream = objFileSystemObject.OpenTextFile(strFile, ForReading, False, TristateUseDefault)
        Else
            '产生一个文件名不存在的错误
            Err.Raise vbObjectError + 1001, "错误", "基督教大辞典没有被发现"
        End If
        
        pdblNumber = pdblNumber - 0.01    '判别是否文件结尾
        Do While objTextStream.AtEndOfStream <> True
            '读取文件的每一行
            strLine = objTextStream.ReadLine
            strSmallTitle = ""
            strEnglishName = ""
            strYear = ""
            If InStr(1, strLine, "☆") > 0 Then
                pdblNumber = pdblNumber + 0.01
                pdblNumber = Format(pdblNumber, "0.00")
                pdblNumber = pdblNumber + 0.00001
            ElseIf InStr(1, strLine, "【") > 0 Then
                intStartPosition = InStr(1, strLine, "【")
                intEndPosition = InStr(1, strLine, "】")
                intLen = intEndPosition - intStartPosition - 1
                strSmallTitle = Mid(strLine, intStartPosition + 1, intLen)
                strA = Trim(Mid(strLine, intEndPosition + 1, Len(strLine) - intEndPosition))
                'strSmallTitle = Replace(strSmallTitle, "'", "''")
                
                If Mid(strA, 1, 1) = "(" Or Mid(strA, 1, 1) = "(" Then
                    strB = Mid(strA, 1, 1)
                    If strB = "(" Then
                        strB = ")"
                    Else
                        strB = ")"
                    End If
                    intEndPosition = InStr(1, strA, strB)
                    intLen = intEndPosition - 2
                    strEnglishName = Mid(strA, 2, intLen)
                    strEnglishName = Replace(strEnglishName, "'", "''")
                End If
                
                strA = Trim(Mid(strA, intEndPosition + 1, Len(strLine) - intEndPosition))
                If Mid(strA, 1, 1) = "(" Or Mid(strA, 1, 1) = "(" Then
                    strB = Mid(strA, 1, 1)
                    If strB = "(" Then
                        strB = ")"
                    Else
                        strB = ")"
                    End If
                    intEndPosition = InStr(1, strA, strB)
                    intLen = intEndPosition - 2
                    strYear = Mid(strA, 2, intLen)
                    strYear = Replace(strYear, "'", "''")
                End If
                
                ' 创建记录集对象。
                objRS.Open "christDic", objConn, adOpenStatic, adLockOptimistic, adCmdTable
        
                    
                strSmallTitle = Trim(strSmallTitle)
        
                strLine = Trim(strLine)
                'strLine = Replace(strLine, "'", "''")
                
                objRS.AddNew
                objRS("分类编目") = Trim(Format(pdblNumber, "0.00000"))
                objRS("中文词条") = strSmallTitle
                objRS("英文词条") = strEnglishName
                objRS("年份") = strYear
                objRS("内容") = strLine
                
                objRS.Update
                
                pdblNumber = pdblNumber + 0.00001
                
                Set objRS = Nothing        Else
                objRS.Open "christDic", objConn, adOpenStatic, adLockOptimistic, adCmdTable
                objRS.MoveLast
                objRS.Update "内容", objRS("内容") & vbCrLf & strLine
                Set objRS = Nothing
            End If
            
        Loop
        
        objRS.Open "insert into christIndex(selfIndex,content,belongIndex) select 分类编目,中文词条,mid(分类编目,1,4) from christDic where 分类编目 like '" & Mid(pdblNumber, 1, 2) & "%'", objConn, adOpenStatic, adLockOptimistic, adCmdText
        Set objRS = Nothing
        
        '释放对象
        objTextStream.Close
        Set objTextStream = Nothing
        Set objFileSystemObject = NothingEnd Function
      

  6.   

    对cuizm(射天狼)说:
    我刚试了一下把数据库里这些字符拷贝到RICHTEXTBOX控件里,不能正常显示。===================================================================
    你从数据库里先拷到WORD里,再从WORD里拷到RICHTEXTBOX控件里,就能正常显示,不知道是数据库拷贝的时候不能带正确的格式,还是从WORD里拷出来的时候带了正确的格式.搞不明白~~
      

  7.   

    我觉得应该是ADO的问题(你是用ADO打开的吧?)
      

  8.   

    对xayzmb(行者)说:
    是用ADO啊!
    Dim objRS As New ADODB.Recordset
    Dim objConn As New ADODB.Connection
    我用ADO将特殊符号输出到文本文件是可以的。
    但是在用richbox读取文本文件就出了问题
    (本来也行,一样的代码,现在则么调都是乱码了,好奇怪)
    Private Sub Form_Load()
        Dim objFileSystemObject As New FileSystemObject
        Dim objTextStream As TextStream
        Dim strFile As String
        strFile = App.Path & "\try.txt"
        Set objFileSystemObject = CreateObject("Scripting.FileSystemObject")
        If objFileSystemObject.FileExists(strFile) = True Then
            '打开文件
            Set objTextStream = objFileSystemObject.OpenTextFile(strFile, ForReading, False, TristateUseDefault)
        Else
            '产生一个文件名不存在的错误
            Err.Raise vbObjectError + 1001, "错误", "基督教大辞典没有被发现"
        End If
            '判别是否文件结尾
        Do While objTextStream.AtEndOfStream <> True
            '读取文件的每一行
            rtfWord.TextRTF = objTextStream.ReadLine
        Loop
        '释放对象
        objTextStream.Close
        Set objTextStream = Nothing
        Set objFileSystemObject = Nothing
    End Sub
      

  9.   

    基本解决了。
    richbox能读入UTF-8的字符串,但在读unicode字符串时有问题。
    而access2000中的字符串是unicode编码的。所以就出现了乱码。    就是上边一个程序,我把文本文件设成unicode字符集richbox不能正确读入。而设成UTF—8就可正确读入了。
    现在的问题是
    1。怎样将 unicode字符串转换成UTF-8字符串
    2。textbox可用richbox控件替换,但combox和treeview怎么办啊