Hiển thị kết quả từ 1 đến 9 / 9
  1. #1
    Tham gia
    27-02-2008
    Bài viết
    9
    Like
    0
    Thanked 0 Times in 0 Posts

    Chuyển qua lại giữa UTF-8 literal và Unicode

    Làm thế nào để chuyển một đoạn văn bảng của bản mã khác sang bảng mã UTF-8 literal hoặc bảng mã UCS2 . Ví dụ em có một đoạn văn bản tiếng việt trong Txt1.Text dược soạn bằng bảng mã Unicode dựng sẵn , làm thế nào để chuyển sang bảng mã UTF - 8 hoặc ÚC2 tương ứng . Rất mong sự giúp đỡ . Thành thật cảm ơn
    Quote Quote

  2. #2
    Tham gia
    05-01-2008
    Bài viết
    74
    Like
    0
    Thanked 0 Times in 0 Posts
    Bạn thử bấm chuột phải vào biểu tượng của unikey trên system tray rồi chọn công cụ (Ctrl+Shift+F6) rồi chọn file nguồn, kiểu chuyển.... cứ thế, chắc là được.
    Have fun!

  3. #3
    Tham gia
    27-02-2008
    Bài viết
    9
    Like
    0
    Thanked 0 Times in 0 Posts
    Sory . Cái tôi muốn chuyển là : "UTF-8 literal " chứ không phải là : UTF- 8 . Các bạn có cách nào không

  4. #4
    Tham gia
    05-12-2007
    Bài viết
    55
    Like
    0
    Thanked 6 Times in 5 Posts
    Bạn đang lập trình bằng ngôn ngử nào ?
    Nếu VB6 thì pm tôi sẽ post lên hàm chuyễn đỗi từ UTF8-Literal sang Unicode cho.

  5. Thành viên Like bài viết này:


  6. #5
    Tham gia
    27-02-2008
    Bài viết
    9
    Like
    0
    Thanked 0 Times in 0 Posts
    Tôi lập trình bằng vb 6.0 . Có thể cho tôi xin code được không

  7. #6
    Tham gia
    05-12-2007
    Bài viết
    55
    Like
    0
    Thanked 6 Times in 5 Posts
    Code đây : (Tốt nhất nên cho vào Module)

    Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" ( _
    lpvDest As Any, lpvSource As Any, ByVal cbCopy As Long)


    Public Function UnicodeToUTF8(UniString As String) As String
    Dim bArray() As Byte, TempB() As Byte, i As Long, k As Long
    Dim TLen As Long, b1 As Byte, b2 As Byte, UTF16 As Long
    Dim byte1 As Byte, byte2 As Byte, byte3 As Byte

    TLen = Len(UniString)
    If TLen = 0 Then Exit Function
    k = 0

    For i = 1 To TLen
    CopyMemory b1, ByVal StrPtr(UniString) + ((i - 1) * 2), 1
    CopyMemory b2, ByVal StrPtr(UniString) + ((i - 1) * 2) + 1, 1

    UTF16 = b2
    UTF16 = UTF16 * 256 + b1

    If UTF16 < &H80 Then
    UnicodeToUTF8 = UnicodeToUTF8 & Chr$(UTF16)
    ElseIf UTF16 < &H800 Then
    byte2 = &H80 + (UTF16 And &H3F)
    UTF16 = UTF16 \ &H40
    byte1 = &HC0 + (UTF16 And &H1F)
    UnicodeToUTF8 = UnicodeToUTF8 & Chr$(byte1) & Chr$(byte2)
    Else
    byte3 = &H80 + (UTF16 And &H3F)
    UTF16 = UTF16 \ &H40
    byte2 = &H80 + (UTF16 And &H3F)
    UTF16 = UTF16 \ &H40
    byte1 = &HE0 + (UTF16 And &HF)
    UnicodeToUTF8 = UnicodeToUTF8 & Chr$(byte1) & Chr$(byte2) & Chr$(byte3)
    End If
    Next
    End Function


    Public Function UTF8ToUnicode(UTF8Str As String) As String
    Dim indexS As Long, UTF8 As Long, U16 As Long, BArrayS() As Byte, lastbyte As Byte
    BArrayS() = UTF8Str
    indexS = LBound(BArrayS)
    On Error Resume Next
    While indexS <= UBound(BArrayS)
    UTF8 = BArrayS(indexS)
    If UTF8 = &HE1 Or UTF8 = &HE2 Then ' 3 bytes
    lastbyte = Merge(BArrayS(indexS + 4), BArrayS(indexS + 5))
    U16 = (BArrayS(indexS) And &HF) * &H1000 + (BArrayS(indexS + 2) And &H3F) * &H40 + (lastbyte And &H3F)

    UTF8ToUnicode = UTF8ToUnicode & ChrW(U16)

    indexS = indexS + 6
    ElseIf ((UTF8 >= &HC3) And (UTF8 <= &HC6)) Or UTF8 = &HCB Then '2 bytes
    lastbyte = Merge(BArrayS(indexS + 2), BArrayS(indexS + 3))
    U16 = (BArrayS(indexS) And &H1F) * &H40 + (lastbyte And &H3F)

    UTF8ToUnicode = UTF8ToUnicode & ChrW(U16)

    indexS = indexS + 4
    Else ' 1 byte
    UTF8ToUnicode = UTF8ToUnicode & Chr(UTF8)
    indexS = indexS + 2
    End If
    Wend
    End Function

    Private Function Merge(ByVal LoByte As Byte, ByVal HiByte As Byte) As Byte
    If HiByte = 0 Then
    Merge = LoByte
    Exit Function
    End If

    Select Case HiByte
    Case 32
    Select Case LoByte
    Case 26: Merge = &H82
    Case 30: Merge = &H84
    Case 38: Merge = &H85
    Case 32: Merge = &H86
    Case 33: Merge = &H87
    Case 48: Merge = &H89
    Case 57: Merge = &H8B
    Case 24: Merge = &H91
    Case 25: Merge = &H92
    Case 28: Merge = &H93
    Case 29: Merge = &H94
    Case 34: Merge = &H95
    Case 19: Merge = &H96
    Case 20: Merge = &H97
    Case 58: Merge = &H9B
    End Select
    Case 33
    Select Case LoByte
    Case 34: Merge = &H99
    End Select
    Case 1
    Select Case LoByte
    Case 146: Merge = &H83
    Case 96: Merge = &H8A
    Case 82: Merge = &H8C
    Case 125: Merge = &H8E
    Case 97: Merge = &H9A
    Case 83: Merge = &H9C
    Case 126: Merge = &H9E
    Case 120: Merge = &H9F
    End Select
    Case 2
    Select Case LoByte
    Case 198: Merge = &H88
    Case 220: Merge = &H98
    End Select
    End Select
    End Function

    Bạn test với các controls có hỗ trợ Unicode để có được kết quả tốt.Dùng MS Form 2.0 hay bộ controls unicode của tôi (Vào đây down về http://ddth.com/showthread.php?t=156562) đều OK.
    Ví dụ [controls].Caption = UTF8ToUnicode("DÆ°Æ¡ng Quốc HÆ°ng")
    => Caption = "Dương Quốc Hưng"
    Hay [Controls].caption = UnicodeToUTF8("Dương Quốc Hưng")
    => Caption = "Dương Quốc Hưng"

  8. Thành viên Like bài viết này:


  9. #7
    Tham gia
    05-09-2008
    Location
    HCM
    Bài viết
    26
    Like
    0
    Thanked 0 Times in 0 Posts
    Cái UTF-8 này có gì đặc biệt nhỉ
    http://dangtritue.blogspot.com

  10. #8
    Tham gia
    05-12-2007
    Bài viết
    55
    Like
    0
    Thanked 6 Times in 5 Posts
    Tùy vào mục đích sử dụng chứ bạn hỏi vậy biết đường đâu mà trả lời !

  11. #9
    Tham gia
    01-04-2009
    Bài viết
    2
    Like
    0
    Thanked 0 Times in 0 Posts
    Chuyển qua lại giữa UTF-8 literal và Unicode
    Làm thế nào để chuyển một đoạn văn bản của bản mã khác sang bảng mã UTF-8 literal hoặc bảng mã UCS2 . Ví dụ em có một đoạn văn bản tiếng việt trong Txt1.Text dược soạn bằng bảng mã Unicode dựng sẵn , làm thế nào để chuyển sang bảng mã UTF - 8 hoặc ÚC2 tương ứng .Em muốn viết bằng java nhưng không dược. Rất mong sự giúp đỡ . Thành thật cảm ơn

Bookmarks

Quy định

  • Bạn không thể tạo chủ đề mới
  • Bạn không thể trả lời bài viết
  • Bạn không thể gửi file đính kèm
  • Bạn không thể sửa bài viết của mình
  •