我在MS Access 2003中有一个表字段,其中包含HTML编码的字符串,如下所示:
Ανταγωνισμός παγκοσμίου επιπέδου στην κατάρτισ
如何使用MS Access将其解码为“普通字符串”?
提前致谢。
到目前为止我所拥有的。使用提供的Vb代码here(BTW我只能从IE7打开该页面,而不是从FF 3.5或Chrome 2打开),我写了以下功能:
Private Function UnicodeDecode(StringToDecode As String) As String
Dim TempAns As String
Dim CurChr As Integer
CurChr = 1
Do Until CurChr - 1 = Len(StringToDecode)
Select Case Mid(StringToDecode, CurChr, 2)
Case "&#"
TempAns = TempAns & Chr(Mid(StringToDecode, CurChr + 2, 3))
CurChr = CurChr + 5
Case Else
TempAns = TempAns & Mid(StringToDecode, CurChr, 1)
End Select
CurChr = CurChr + 1
Loop
UnicodeDecode = TempAns
End Function
现在,当你提供最多255个字符的十进制值时,这是有效的。如果我尝试执行,例如:
Chr(338)
它失败并显示“无效的过程调用或参数”。根据{{3}},我认为默认情况下MS Access仅支持ISOlat1标准。但是,我需要转换十进制值大于913的unicode字符,即ISOgrk3。
有谁知道我该怎么做?
再次感谢。
答案 0 :(得分:4)
您可以使用msxml6.dll(Microsoft XML v6.0)将html实体转换为VBA中的纯文本:
Set oDOMDoc = CreateObject("Msxml2.DOMDocument.6.0")
Html = "<Black>"2"
oDOMDoc.LoadXML ("<root>" & Html & "</root>")
HtmlDecode = oDOMDoc.Text
答案 1 :(得分:2)
这个available on the web的VB代码在Access中保持不变。我已经在生产Access应用程序中使用该代码已有好几年了,并且从未遇到任何问题。
答案 2 :(得分:1)
以下是一篇文章,其中提供了许多可能涉及的方向:
Using Unicode in Visual Basic 6(Access的VBA是VB6的超集)
然后你可能想要使用这些Access / VBA函数:
这并不能解决所有问题,但这应该会给你一个起点。
注意StrConv()第二个参数的两个常量,vbUnicode和vbFromUnicode,最后一个可选参数是字符集,希腊语在上面引用的URL中给出为161(似乎没有是一个命名常量 - dbLangGreek常量返回“; LANGID = 0x0408; CP = 1253; COUNTRY = 0”)。
在我看来,只要您将此限制为希腊语,您可能需要设置一个数组,将字符映射到相应的数字编码。但我认为使用处理多种编码的解决方案会更好。
最后,您可以尝试访问Michael Kaplan旧网站Trigeminal.com上的此页:
The Localized Website of Trigeminal Software, Inc.
...并向下滚动到最后,“此站点上的其他I18n资源。” .NET和其他编程的大部分信息已经过时,但它仍然适用于VB6 / Access VBA。
答案 3 :(得分:1)
非常感谢。 如果输入数组有 4 数字(如波斯语),我必须更改一些代码 当您想在MS Access中将其用作宏时,该功能也应该是公开。 应用 ChrW()而不是Chr()。
Public Function UnicodeDecode(StringToDecode As String) As String
Dim TempAns As String
Dim CurChr As Integer
CurChr = 1
Do Until CurChr - 1 = Len(StringToDecode)
Select Case Mid(StringToDecode, CurChr, 2)
Case "&#"
TempAns = TempAns & ChrW(Mid(StringToDecode, CurChr + 2, 4))
CurChr = CurChr + 6
Case Else
TempAns = TempAns & Mid(StringToDecode, CurChr, 1)
End Select
CurChr = CurChr + 1
Loop
UnicodeDecode = TempAns
End Function
答案 4 :(得分:0)
将其粘贴到文件中并将其另存为HTML文件,然后在浏览器中打开。
当我尝试时,我得到了一些奇怪的字体,如希腊语或阿拉伯语,我确信它对你来说比对我更有意义:
Ανταγωνισμόςπαγκοσμίουεπιπέδουστηνκατάρτισ(Greek)
答案 5 :(得分:0)
我知道这是一个旧线程,但是总是在寻找更好的捕鼠器...
Public Function HtmlDecode(StringToDecode As Variant) As String
Set oMSHTML = CreateObject("htmlfile")
Set e = oMSHTML.createElement("T")
e.innerHTML = StringToDecode
HtmlDecode = e.innerText
End Function
答案 6 :(得分:0)
偶然发现这篇文章来解码嵌入在 xml 元素中的“html 编码的 xml”。 @David-W-Fenton 目前接受的答案是关于 url 解码,它不能解决问题也不能解决我的问题。 当 html 实体被混入时,@Ruslan 的答案有问题(如@Roemer 所述)。 在这里,我有一个带有 unicode 控制代码和 html 实体的工作示例,它解决了这些问题并(改进)了@Tx-Barnstormer 给出的答案:
Public Sub TestDecoding()
Dim htmlEncoded As String
Dim xmlDoc As Object
htmlEncoded = "<tests>" & _
"<eacute>é</eacute>" & _
"<amp>&amp;</amp>" & _
"<childNode><childNode attribute="testvalue">I'm a childNode</childNode></childNode>" & _
"<otrema>ö</otrema>" & _
"<hyphen>–</hyphen>" & _
"</tests>"
Debug.Print HtmlDecode(htmlEncoded)
End Sub
Function HtmlDecode(str As String) As String
Dim dom As Object
Set dom = CreateObject("htmlfile")
dom.Open
dom.Write str
dom.Close
HtmlDecode = dom.Body.innerText
End Function
TestDecode 的格式化输出:
<tests>
<eacute>é</eacute>
<amp>&</amp>
<childNode><childNode attribute="testvalue">I'm a childNode</childNode></childNode>
<otrema>ö</otrema>
<hyphen>–</hyphen>
</tests>
此功能也适用于开头帖子中的字符串,但您会在“立即”窗口中看到问号。为了解决这个问题,我没有测试过,你应该设置系统的语言环境: Displaying Japanese text in the Immediate Window of Excel VBA
为了您的方便:
??ta????sµ?? pa???sµ??? ep?p?d?? st?? ?at??t?s
立即窗口将希腊字符转换为 ANSI 并且无法显示它们,至少在我的情况下是这样。