I'm want function UTF-8 to ASCII or utf-8 to tis620

Discussion in 'Questions (Windows Mobile)' started by thaidelphi, Aug 5, 2008.

  1. thaidelphi

    thaidelphi Member

    I'm want function UTF-8 to ASCII or utf-8 to tis620
    'm use SQlite insert2db by Thai language. when preview result filed is 'อ่านไม่ออก'
    I'm want function for decode it to ASCII
    Exemple sample code php ** but i'm connot converse to VB code
    function utf8_to_tis620($string) {
    $str = $string;
    $res = "";
    for ($i = 0; $i < strlen($str); $i++) {
    if (ord($str[$i]) == 224) {
    $unicode = ord($str[$i+2]) & 0x3F;
    $unicode |= (ord($str[$i+1]) & 0x3F) << 6;
    $unicode |= (ord($str[$i]) & 0x0F) << 12;
    $res .= chr($unicode-0x0E00+0xA0);
    $i += 2;
    } else {
    $res .= $str[$i];
    }
    }
    return $res;
    }
     
  2. agraham

    agraham Expert Licensed User

    Thi is a literal translation of that php code. However it will not work with B4ppc because all strings are UTF16 within the .NET environment in which B4ppc runs.
    Code:
    Sub  string_utf8_to_tis620(string)
       str = 
    string;
       res = 
    ""
       
    For i = 0 To StrLength(str) - 1 
          
    If (Asc(SubString(str,i,1)) = 224Then
             unicode = 
    Asc(SubString(sti+2,1)) Mod 64
             unicode = unicode + (
    Asc(SubString(str, i+1,1)) Mod 64) * 64 
             unicode  = unicode + (
    Asc(SubString(str,i,1)) Mod 16) * 4096
             res = res & 
    Chr(unicode-3584+160)
             i = i + 
    2
          
    Else 
             res = res + SubString(str,i,
    1)
          
    End If
       
    Next
       
    Return res
    End Sub
    If the UTF8 string is available as a byte array within B4ppc then this might work
    Code:
    Sub  bytes_utf8_to_tis620
       str = 
    string;
       res = 
    ""
       
    For i = 0 To ArrayLen(bstr()) - 1 
          
    If (bstr(i) = 224Then
             unicode = bstr(i+
    2Mod 64
             unicode = unicode + bstr(i+
    1Mod 64 * 64 
             unicode  = unicode + bstr(i) 
    Mod 16 * 4096
             
    Msgbox(unicode)
             res = res & 
    Chr(unicode-3584+160)
             i = i + 
    2
          
    Else 
             res = res & 
    Chr(bstr(i))
          
    End If
       
    Next
       
    Return res
    End Sub
    But this begs the question as to why you want some sort of "ASCII" data within a Unicode environment :confused:
     
  3. thaidelphi

    thaidelphi Member

    Thank you very much
    and I want convert this function | PHP to VB | thank you
    function tis2utf8($tis) {
    for( $i=0 ; $i< strlen($tis) ; $i++ ){
    $s = substr($tis, $i, 1);
    $val = ord($s);
    if( $val < 0x80 ){
    $utf8 .= $s;
    } elseif ( ( 0xA1 <= $val and $val <= 0xDA ) or ( 0xDF <= $val and $val <= 0xFB ) ){
    $unicode = 0x0E00 + $val - 0xA0;
    $utf8 .= chr( 0xE0 | ($unicode >> 12) );
    $utf8 .= chr( 0x80 | (($unicode >> 6) & 0x3F) );
    $utf8 .= chr( 0x80 | ($unicode & 0x3F) );
    }
    }
    return $utf8;
    }
     
  4. agraham

    agraham Expert Licensed User

    You appear to want to do a conversion from a single byte character string in a TIS620 codepage to UTF8. As I pointed out before this doesn't work, or may not even be necessary in a .NET based application which is UTF16. You need to analyse why you think you need this.
     
Loading...
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice