请问如何在文本框中显示特殊字符(拉丁文)

zyizyizyi 2003-08-25 09:32:26
我在做了一个基督教大词典的电子查询,但是遇到一点问题,数据库中的一些拉丁文不能正常的显示出来。如果遇到拉丁文,它就会以一个问号代替显示。请问如何解决。

代码一般都和以下差不多,但如果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,但也不行。请问这种问题如何解决。
...全文
890 16 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
zyizyizyi 2003-08-26
  • 打赏
  • 举报
回复
对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
xayzmb 2003-08-26
  • 打赏
  • 举报
回复
我觉得应该是ADO的问题(你是用ADO打开的吧?)
liuxiang800314 2003-08-26
  • 打赏
  • 举报
回复
关注
flc 2003-08-26
  • 打赏
  • 举报
回复
xuexi
zyizyizyi 2003-08-26
  • 打赏
  • 举报
回复
基本解决了。
richbox能读入UTF-8的字符串,但在读unicode字符串时有问题。
而access2000中的字符串是unicode编码的。所以就出现了乱码。

就是上边一个程序,我把文本文件设成unicode字符集richbox不能正确读入。而设成UTF—8就可正确读入了。


现在的问题是
1。怎样将 unicode字符串转换成UTF-8字符串
2。textbox可用richbox控件替换,但combox和treeview怎么办啊
hxy2003 2003-08-25
  • 打赏
  • 举报
回复
UP

是否可以显示平方数的啊.
zyizyizyi 2003-08-25
  • 打赏
  • 举报
回复
对cuizm(射天狼)说:
我刚试了一下把数据库里这些字符拷贝到RICHTEXTBOX控件里,不能正常显示。
“在VB中的转换时用的字符集”这个能设定吗?我要的是正常显示,总不见得不能实现吧!以前我要把数据导入到数据库也碰到过类似的问题,后来也解决了。
'***********************************
'Sub/Function: 返回索引结果
'
'Arguments: pstrSearch
'
'return:索引结果
'
'Remark:
'
'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 = Nothing

End Function
射天狼 2003-08-25
  • 打赏
  • 举报
回复
我说的字符集不是指数据库,因为在数据库里能正常显示,我指的是在VB中的转换时用的字符集。
射天狼 2003-08-25
  • 打赏
  • 举报
回复
word、记事本、写字板你不都是粘贴进去的吗,其实你从WORD或者记事本里把这些字符拷贝到RICHTEXTBOX控件里也能正常显示的(只是编程赋值不行),我想还是字符集的问题,StrConv转换不可以,要不跟不转换一样,要不就是更乱的字符~~
zyizyizyi 2003-08-25
  • 打赏
  • 举报
回复
对 lxcc(虫莲)说:
听不太懂,能不能说详细点。
我在word,记事本、写字板里都能显示拉丁文的。这说明相应字库已经安装了,我是这样理解的。
lxcc 2003-08-25
  • 打赏
  • 举报
回复
安装相应字库
zyizyizyi 2003-08-25
  • 打赏
  • 举报
回复
对 ch21st(风尘鸟)说:
我用过的StrConv(objrs("内容"),vbunicode),越用越乱。
道素 2003-08-25
  • 打赏
  • 举报
回复
看看能否用StrConv解决
zyizyizyi 2003-08-25
  • 打赏
  • 举报
回复
对cuizm(射天狼)说:
数据库里是unicode字符集啊,问题是遇到了拉丁文就不能正常显示了。
我想微软能解决,应该是有办法的啊。
射天狼 2003-08-25
  • 打赏
  • 举报
回复
这不是程序的原因,是字符集的问题了~!~
射天狼 2003-08-25
  • 打赏
  • 举报
回复
对cuizm(射天狼)说:
我刚试了一下把数据库里这些字符拷贝到RICHTEXTBOX控件里,不能正常显示。

===================================================================
你从数据库里先拷到WORD里,再从WORD里拷到RICHTEXTBOX控件里,就能正常显示,不知道是数据库拷贝的时候不能带正确的格式,还是从WORD里拷出来的时候带了正确的格式.搞不明白~~

7,785

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧