如何解码MS Access中的HTML编码文本

时间:2009-09-07 15:29:42

标签: html ms-access encoding url-encoding

我在MS Access 2003中有一个表字段,其中包含HTML编码的字符串,如下所示:

Ανταγωνισμός παγκοσμίου επιπέδου στην κατάρτι&#963

如何使用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。

有谁知道我该怎么做?

再次感谢。

7 个答案:

答案 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()
  • ASCB()
  • CHRB()

这并不能解决所有问题,但这应该会给你一个起点。

注意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 = "&lt;tests&gt;" & _
        "&lt;eacute&gt;&eacute;&lt;/eacute&gt;" & _
        "&lt;amp&gt;&amp;amp;&lt;/amp&gt;" & _
        "&lt;childNode&gt;&lt;childNode attribute=&quot;testvalue&quot;&gt;I&apos;m a childNode&lt;/childNode&gt;&lt;/childNode&gt;" & _
        "&lt;otrema&gt;&#xF6;&lt;/otrema&gt;" & _
        "&lt;hyphen&gt;&#x2013;&lt;/hyphen&gt;" & _
    "&lt;/tests&gt;"
    
    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;</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 并且无法显示它们,至少在我的情况下是这样。