2009-09-07 47 views
3

我在MS Access 2003中包含HTML編碼字符串像這樣的表字段:如何HTML編碼的文本在MS Access解碼

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

我怎樣才能解碼成一個「正常的字符串」這一點,使用MS訪問?

在此先感謝。


這裏我到目前爲止。使用VB代碼提供here(順便說一句,我只能從IE7打開網頁,而不是從FF 3.5也不鉻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 

現在,這一工程時提供的字符的十進制值如果我嘗試執行,例如:

Chr(338) 

它失敗並顯示「Invalid procedure call or argument」。根據this reference,我想MS Access默認只支持ISOlat1標準。但是,我需要將Unicode字符轉換爲913以上的十進制值,即ISOgrk3。

有誰知道我該怎麼做到這一點?

再次感謝。

回答

2

這個available on the web的VB代碼在Access中保持不變。我已經在生產Access應用程序中使用該代碼幾年了,並且從來沒有任何問題。

+0

大衛,非常感謝,這是我需要的!現在我可以編寫VB代碼從表中讀取字段並存儲解碼後的值。 – Dejan 2009-09-08 07:54:03

+0

我試過這段代碼,它完美的工作,但正如我在上面寫評論,我只是意識到我需要一個稍微不同的解碼。不是以「%」開頭的特殊字符,而是顯然是「&#」。 – Dejan 2009-09-08 11:20:25

0

將其粘貼到文件中並將其另存爲HTML文件,然後在瀏覽器中打開它。

我得到了一些奇怪的字體像希臘或阿拉伯語,當我試圖爲我敢肯定它會更有意義,你比它給我:

Ανταγωνισμόςπαγκοσμίουεπιπέδουστηνκατάρτισ(希臘)

+0

你是對的,這是希臘語,這應該是我最後輸出。我嘗試了下面David提供的代碼,這就是我所要求的 - 它解碼HTML編碼文本。但是,現在我意識到我需要別的東西。我需要一個VB代碼,將這些語言字符解碼爲正確的文本。 – Dejan 2009-09-08 11:15:42

0

下面是提出一些方向,你可能進去的文章:

Using Unicode in Visual Basic 6(訪問的VBA是VB6的超集)

,那麼你可能會想淤泥圍繞這些接入/ VBA功能:

  • 中StrConv()
  • ASCB()
  • CHRB()

這並不能解決所有問題,但應該給你一個出發點。

注意StrConv()第二個參數vbUnicode和vbFromUnicode的兩個常量,最後一個可選參數是字符集,希臘字符集在上面引用的URL中給出爲161(似乎沒有作爲一個命名常量 - dbLangGreek常量返回「; LANGID = 0x0408; CP = 1253; COUNTRY = 0」)。

在我看來,只要您僅限於希臘語,就可能需要設置一個將字符映射到其對應的數字編碼的數組。但我認爲使用處理多種編碼的解決方案會更好。

所有的最後,你可以嘗試去對邁克爾·卡普蘭的舊網站的這個網頁,Trigeminal.com:

The Localized Website of Trigeminal Software, Inc.

...並在此向下滾動到年底,「其他資源的I18n現場。」大部分信息已經過時了.NET和其他編程,但它仍然適用於VB6/Access VBA。

+0

再次感謝您的答覆,這是很多資源,我會檢查出來。 – Dejan 2009-09-09 14:29:25

1

非常感謝。 我必須改變一些代碼,如果輸入數組有數字(像波斯) 也功能應公衆當你想在MS Access中使用它作爲宏。 apply 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 
+0

我無法讓你的代碼工作,所以我修改它以改變你的直到「直到CurChr> Len(StringToDecode)」和你的ChrW(Mid(StringToDecode,CurChr + 2,4))到「ChrW(Mid (StringToDecode,CurChr + 2,3))「。前者是因爲循環沒有終止並且以溢出結束(您可能會考慮將CurChr更改爲Long,因爲您將可以解碼的字符串長度限制爲VBA整數的最大值,即只有32K奇數字符)。後一個變化是因爲你通過了「;」與數字一起。 – 2010-03-14 21:41:36

+1

此外,在我看來,你不應該假設編碼字符將是3位數字,而是拉出「&#」和「;」之間的值,因爲unicode字符的數字可以達到64K奇數。此外,unicode字符可以編碼爲十進制或十六進制,因此爲了完全兼容,您還需要考慮十六進制值。爲了提取這些值,你可以嘗試使用Split()和「;」字符作爲分隔符,然後處理結果數組。 – 2010-03-14 21:46:45

+0

爆炸與chrW() – GWR 2015-12-29 22:58:38

4

您可以使用msxml6.dll(微軟XML 6.0版)爲HTML實體轉換爲純文本在VBA:

Set oDOMDoc = CreateObject("Msxml2.DOMDocument.6.0") 
Html = "<Black>"2" 
oDOMDoc.LoadXML ("<root>" & Html & "</root>") 
HtmlDecode = oDOMDoc.Text 
+1

唉,這似乎並不奏效。至少對我來說。 只要您添加&eacute;到HTML字符串,它返回一個空字符串。 (VBA Office 2013,荷蘭語)。 – Roemer 2016-10-04 11:26:02

+0

對於我提到的&eacute也是一樣的;和許多其他字符串從ISO拉丁字母表1號表,例如‘,所以這種方法是不可靠的。 – 2017-01-02 21:05:45