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

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,但也不行。请问这种问题如何解决。
...全文
829 16 打赏 收藏 转发到动态 举报
写回复
用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里拷出来的时候带了正确的格式.搞不明白~~
输入工具可让您以自己选择的语言输入文字。 通过安装此扩展程序,即表示您同意http://www.google.com/intl/zh-CN/policies/terms/上的服务条款。 切换到用鼠标点击不同的语言,并轻松切换回来 Google输入工具扩展提供超过90种语言的虚拟键盘,完整的IME或30多种不同脚本的直接音译,以及超过40种语言的手写输入。 什么是新的? ✓更新文离线词典。 ✓添加一些新的输入工具,如纳瓦霍键盘,波斯尼亚,宿务,苗族,卡纳达,马耳他,索马里和泰米尔语手写输入工具。 ✓修复了一些错误。 使用说明: 首次安装扩展程序时,单击扩展程序图标,然后在弹出菜单选择“扩展程序选项”。将出现一个新选项卡,您可以在其选择您的首选语言或输入法。您可以随时从分机本身启用您添加到“所选输入工具”的键盘,IME或手写输入。您始终可以返回到此选项页面来添加,删除或更改输入工具的顺序。 输入工具,只需单击扩展图标,在弹出菜单选择所需的语言工具,然后单击网页上的任何文本框。要关闭输入工具,请单击扩展名图标并选择“关闭”选项。 要使用音译,请用英文字母输入语言,并以正确的字母表显示。请记住,音译不同于翻译;单词的声音从一个字母转换到另一个,而不是意义。例如,要使用印地语音译获得英语,请输入n-a-m-a-s-t-e。你会得到一个印地文单词列表听起来像合十礼。然后,按空格键选择第一个建议नमस्ते。 拉丁语输入法是帮助人们使用美式键盘输入拉丁语脚本语言。功能包括自动变音符号,拼写纠正和前缀完成。要使用拉丁文输入法,请键入不重叠的字母,然后将其更正为所需的单词。例如,在法语输入法键入“franca”,出现“français”,按TAB键即可提交。如果不断键入“francais”,“français”将被承诺 按空格。要获得“francais”的所有候选人,请按BACKSPACE。 要使用手写输入,请选择所需语言的手写输入。按下触控板或鼠标左键在弹出的手写面板上手绘一个字符。从建议列表选择字符,或者只需按ENTER或SPACE键选择第一个建议。 需要帮忙?发现问题?将您的浏览器指向这里寻求支持 https://chrome.google.com/webstore/support/mclkkofklkfljcocdinagocijmpgbhab 键盘快捷键: SHIFT - 切换所有音译(IME)工具的激活/非激活状态 ALT + SHIFT - 切换到列表的下一个输入工具(如果扩展名关闭,打开它;如果当前输入工具是列表的最后一个工具,关闭扩展名) CTRL +空格 - 恢复到上次使用的输入工具(如果没有,则关闭扩展名) SHIFT + SPACE - 切换SBC / DBC模式(仅限文输入工具) CTRL + PERIOD - 切换文/欧洲语言标点符号(仅限文输入工具) 限制: 由于Google Chrome的安全功能,Google输入工具扩展程序不会协助在地址栏(多功能框),Chrome网上应用店或其他Chrome扩展程序输入内容。它目前不支持在Flash应用程序输入内容。 通过安装此扩展程序,即表示您同意https://chrome.google.com/extensions/intl/zh-CN/gallery_tos.html上的服务条款 支持语言:Bahasa Indonesia,Bahasa Melayu,Deutsch,English,English (UK),Filipino,Français,Kiswahili,Nederlands,Tiếng Việt,Türkçe,català,dansk,eesti,español,español (Latinoamérica),hrvatski,italiano,latviešu,lietuvių,magyar,polski,português (Brasil),português (Portugal),română,slovenský,slovenščina,suomi,svenska,čeština,Ελληνικά,Српски,български,русский,українська,עברית,فارسی‎,मराठी,हिन्दी,বাংলা,ગુજરાતી,தமிழ்,తెలుగు,ಕನ್ನಡ,മലയാളം,ไทย,አማርኛ,‫العربية,文 (简体),文 (繁體),日本語,한국어

7,762

社区成员

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

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