April 24, 2009

RTF檔案字串取代研究

當需要將字串代入Word檔案又不想在客戶端安裝Office時,我們會以RTF檔案格式將所要顯示的字串取代掉設定在RTF檔案裡的變數後,再讓客戶下載並將副檔名變更為*.doc。以下是可能的實作步驟:
  1. 將客戶提供的Word檔另存成RTF格式
  2. 在RTF檔案中設定要被取代為字串的變數
  3. 客戶端點選連結下載時將字串代入RTF檔案並將副檔名更改為*.doc
在RTF中,中文字會以16進位來儲存,而某些中文字的16進位字元的某兩個字元組合恰巧會是某些符號的16進位字元。如此,當我們做字串取代後,有可能會發生取代後的文字在顯示時出現亂碼,甚至是檔案無法開啟的情況。

要解決此問題,我們必須在取代RTF檔案內的變數前,就先將我們要代入的字串轉成16進位,並加入特殊字元的前置符號\'後再進行取代,如此才能正常顯示中文字。以下程式片段可將一字串轉換為16進位並加入特殊字元的前置符號。
Public Shared Function GetRtfCode(ByVal str As String) As String
  Dim sb As New StringBuilder()
  Dim Bytes() As Byte = Encoding.Default.GetBytes(str)
  For Each b As Byte In Bytes
    sb.Append("\'" & IIf(b < 16, "0" & Hex(b), Hex(b))) 
  Next
  Return sb.ToString().ToLower()End Function
參考