none
Read text 以及 得到text 的位置 RRS feed

  • 問題

  • 客戶給我一個Text file,在notepad中看到是ANSI file,文字內容有英文也有中文,我必須取得每一行固定位置及固定長度的字串。

    如果我以ASCII模式Read File,我可以取得正確的byte位置,可是讀取的中文字會是亂碼。

    如果我以UTF-8方式Read file,中文字是正確的,但是Byte位置就不對了(英文字及數字在UTF-8也是佔用2 bytes)。

    要怎樣解決這樣的問題呢??

    2006年10月23日 下午 01:26

解答

  • 0. 在 VB5 以後,記憶體就採用 Unicode ,這種問題早就有解決方案了。我印象中本版討論過,建議你待會搜尋 Mid Unicode 看看。

    1. 你去讀會出現亂碼,表示你的 Encoding 指定錯誤,後面沒啥好談的。而該用哪種 code ,應該根據檔案原始編碼而決定,不是爽就換一個。

    2. UTF8 英數是每個字 1 byte ,遠東語系等日韓繁簡罕則是 3 ~ 4 bytes

    3. Unicode 則不分語言,全部每個字都是 2 bytes

    我自己處理這種問題的函式庫:

    http://tlcheng.twbbs.org/TLCheng/Net/NetList.aspx?Action=Function&Module=6&Function=16

    2006年10月23日 下午 04:06
    版主

所有回覆

  • Hi,您好 請參考看看

    您在讀檔的時候應該用預設的編碼方式去讀取應該就可以了,例如

            Dim SR As New IO.StreamReader(Application.StartupPath & "\123.txt", System.Text.Encoding.Default)
            Dim S As String = ""
            S = SR.ReadToEnd

    這樣用SubString去切的話中、英文都是1;如果您系統的預設編碼不是big5的話可以用這樣取得編碼

            Dim EN_BIG5 As System.Text.Encoding = System.Text.Encoding.GetEncoding("big5")
            Dim SR As New IO.StreamReader(Application.StartupPath & "\123.txt", EN_BIG5)
            Dim S As String = ""
            Dim Y As String = ""
            S = SR.ReadToEnd
            TextBox1.Text = S
            For x As Integer = 0 To S.Length - 1
                Y = Y & S.Substring(x, 1) & vbCrLf
            Next
            TextBox1.Text = TextBox1.Text & vbCrLf & Y

    2006年10月23日 下午 02:59
    版主
  • 0. 在 VB5 以後,記憶體就採用 Unicode ,這種問題早就有解決方案了。我印象中本版討論過,建議你待會搜尋 Mid Unicode 看看。

    1. 你去讀會出現亂碼,表示你的 Encoding 指定錯誤,後面沒啥好談的。而該用哪種 code ,應該根據檔案原始編碼而決定,不是爽就換一個。

    2. UTF8 英數是每個字 1 byte ,遠東語系等日韓繁簡罕則是 3 ~ 4 bytes

    3. Unicode 則不分語言,全部每個字都是 2 bytes

    我自己處理這種問題的函式庫:

    http://tlcheng.twbbs.org/TLCheng/Net/NetList.aspx?Action=Function&Module=6&Function=16

    2006年10月23日 下午 04:06
    版主
  • 小弟現在連不上您所說的網站ㄝ...
    2006年10月24日 上午 07:29
  • 我點可以啊~


    MyMid 函數
    說明

    取得中英文混合字串

    本函數之引數列表

    引數 型態 位元組 選項 預設值 說明
    vString String - 必須 (無) 可中英文混合使用
    iStart Integer 4 必須 (無) 起始位置,同 Mid 第二個引數
    iLength Integer 4 可省略 0 取得長度,同 Mid 第三個引數

    傳回值

    字串 (String)

    範例

    Debug.Write(MyMid("中文Testing測試",3,4))
    ' 可傳回 "文Te"

    基本條件

    Visual Studio .Net 2002 以後相容版本 | StrTools.vb

    請參閱

    modStrTools 函數庫 | MyMid (VB)


    原始碼請點 StrTools.vb ,因為有呼叫到轉碼函數。

    完整函式庫列表點選 modStrTools 函數庫。

    2006年10月24日 上午 08:26
    版主
  • 我從公司還是連不進去

    昨天我從家裡是可以的

    您是否可以將strtools.vb這個檔案mail給我??

    ufgeorge@yahoo.com.tw

     

    2006年10月24日 上午 09:16
  • ... 可能是你們公司網管政策把 *.twbbs.org 全擋了吧~

    那就麻煩你回家再抓,我現在才看到,估計你也回到家了...

    2006年10月24日 下午 02:50
    版主