ascii & unicode -- ภาษาไทย

Last post 09-19-2008 19:52 by coreadmin. 4 replies.
Page 1 of 1 (5 items)
Sort Posts: Previous Next
  • 09-18-2008 19:43

    • robot
    • Top 10 Contributor
    • Joined on 03-25-2008
    • Posts 16

    ascii & unicode -- ภาษาไทย

    ... คือผมมีโปรแกรมนึงนะคับ เขียนเพื่ออ่านข้อมูลจาก ไฟล์ xml ซึ่ง data ใน element หรือ tag ต่างนั้นจะเป็นข้อมูล ที่เป็นทั้งภาษาอังกฤษ และไทย ที่อยู่ในรูปตัวเลขฐาน16 คือ ตอนสร้าง ผมจะเอา string ที่จะสร้างเป็น tag นั้นเอามาเปลี่ยน จาก charactor เป็น ตัวเลขฐาน16 ไล่เรียงกันไป เช่น abc->414243 (เหตุผลที่ผมทำเพราะว่าข้อมูลเป็น string ยาวมาก บางครั้งมีเว้นวรรค บางครั้งมีขึ้นบรรทัดใหม่ และอาจมีตัวหนังสือแปลกๆ ซึี่งอาจจะส่งผลให้ tag ของ xml ไม่ถูกต้องได้นะครับ .. ไม่รู้ว่าใครมีแนวคิดอื่นหรือเปล่า..??) หลังจากสร้างเป็นไฟล์ xml แล้ว เมื่อผมอ่านข้อมูลขึ้นมา ก็จะได้ 414243 ผมก็เอาไปเข้า function private string HexstrToString(string h) { string tmpstr = ""; string decStr =""; int j=0; for (int i=0;i
  • 09-19-2008 6:38 In reply to

    Re: ascii & unicode -- ภาษาไทย

    หวัดดีครับ ผมเพิ่งสมัครสมาชิกใหม่เอง เคยแวะเวียนมาอ่านบ้างเหมือนกัน ผมเคยทำใช้บ่อยอยู่เหมือนกับเกี่ยวกับการอ่านเขียนไฟล์ xml ใน Windows, WebService นะครับ ซึ่งการใช้ภาษาไทยเก็บข้อมูลก็ไม่มีปัญหาอะไรครับ ตัวอักษรต่าง ๆ ก็สามารถเก็บได้หมด ผมทำแบบนี้ครับ DataSet ds = new DataSet(); DataTable dt = ds.Tables.Add("myData"); // สร้างคอลัมน์ dt.Columns.Add("Code", typeof(string)); dt.Columns.Add("CustomerName", typeof(string)); dt.Columns.Add("MobileNo", typeof(string)); // ใส่ข้อมูล DataRow dr = dt.NewRow(); dr["Code"] = "001"; dr["CustomerName"] = "สมหมาย เจริญวงษ์ [avd@#]"; dr["MobileNo"] = "0812229999"; dt.Rows.Add(dr); ds.WriteXml("C:\\test.xml", XmlWriteMode.WriteSchema); ประมาณนี้ครับ
  • 09-19-2008 8:42 In reply to

    Re: ascii & unicode -- ภาษาไทย

    ถ้าต้องการใส่ String แปลกๆ ลงไประหว่าง Tag xml เราสามารถใใช้แท็ก CDATA ได้ครับ เช่น

     

    <description>
    <![CDATA[
    Instruction
    Hand wash in cold water

    Description
    *Heart print on Purple cotton sleeveless suitable for summer
    *Can be worn only itself or on top of other layers
    *Gathered rim on neckline to front line
    *Cream crochet lace decoration on front with pleats

    100% Cotton

    Size: 8-10

    Length: 70 cm
    Width: 98 cm (Bust line)
    ]]> f(clean);
    </description>
     
    Smile แต่ถ้าใช้คลาสของ .NET เขียนไฟล์ XML ให้ มันจะทำการแปลงให้เราเองครับ (เท่าที่จำได้นะ)
     
    ไอเดียที่ว่าการแปลง ข้อความนั้นผมว่าดีมากเลยครับ บางคนนี่ ได้แต่ใช้ Library อย่างเดียว ไม่ได้เอะใจเลยว่า จริงๆ แล้วมันทำอะให้เรา (มีอะไรให้ใช้ ก้อใช้ได้เท่านั้น) Stick out tongue
     
    แต่ว่าถ้าตามหลักการแล้ว XML มันจะต้องอ่านได้ด้วยตาเปล่าด้วย จึงไม่ควรมีการ Encode ข้อมูลซัำซ้อนไปอีกรอบเลยไม่น่าเหมาะครับ ถึงได้มีการกำหนดแท็ก CDATA ขึ้นมาให้ในมาตรฐานให้เราใช้ได้ครับ

     

     

  • 09-19-2008 9:25 In reply to

    • robot
    • Top 10 Contributor
    • Joined on 03-25-2008
    • Posts 16

    Re: ascii & unicode -- ภาษาไทย

    ขอบคุณมากคับ สำหรับทุกคำตอบ ... :))) ... โปรแกรมหน้าผมคงจะทำแบบ "CDATA" แล้วล่ะ แต่ตอนนี้ ผมมีปัญหานิดหน่อยกับของมูลของไฟล์ที่สร้างไปแล้วนะครับ ผมจะทำยังไงดี คือผม อ่านมาแล้วแปลงเป็นกลับเป็นภาษาไทยไม่ได้นะครับ ได้แต่่ข้อความที่เป็นภาษาอังกฤษอ่ะคับ มันจะไม่ได้ ผมต้องทำยังไงบ้างอ่ะครับ


    string xmldata = HexstrToString(objXmlTextReader.Value);

      private string HexstrToString(string h)
        {
           string tmpstr = "";
           string decStr ="";
           int j=0;

           for (int i=0;i
            {
             tmpstr += h[ i ];
             j++;

             if(j==2)
             {//--"
              decStr += (char)Hex2Dec(tmpstr);
              tmpstr = "";
              j=0;
             }
            }


            return decStr;
            //byte[ unicodestr = Encoding.ASCII.GetBytes(decStr);
            // Encoding ascii = Encoding.ASCII;
            // Encoding unicode = Encoding.Unicode;
            // byte[ unicode_byte = Encoding.Convert(ascii, unicode, unicodestr);


            //return Encoding.Unicode.GetString(unicode_byte);

         }

  • 09-19-2008 19:52 In reply to

    Re: ascii & unicode -- ภาษาไทย

     อ๋า แบบนี้ตอบยากจังครับ คงต้องดูโค๊ดประกอบด้วย

    แต่ว่า ใน .NET String มันจะเป็น Unicode ครับ คือว่า ค่าของ ก ไก่ เนี่ย มีค่าเป็นพันเลย (3585) ถ้าจำไม่ผิดก้อ ตัวอักษรฐาน 16 หนึ่งตัว มันเก็บได้ 4 บิต ดังนั้น ถ้าจะเก็บให้พอ ก้ออาจจะต้องใช้เลข 16 บิต นั่นก็คือ ต้องมีตัวอักษร Hex 4 ตัว แทนตัวอักษร Unicode 1 ตัว เช่น ก ไก่ คือ E01 ครับ อัตราส่วน 1:4 เลยทีเดียว

    ถ้าจะแปลงจริงๆ ก้ออาจจะต้อง Normalize ให้ตัวอักษรทุกตัว พอเซฟแล้ว มันยาว 4 ตัว (E01 -> 0E01 = ก ไก่) แล้วอ่าน ก้ออ่านมาทีละ 4 ตัว จากนั้นค่อยแปลงกลับเป็น int และแปลงต่อเป็น char แล้วมาต่อกันเป็น string ในที่สุด

    หรือถ้ายังทัน จะใช้ Convert.ToBase64String()  ก้อได้นะครับ ได้ผลคล้ายๆ กัน ก้อคือ เอา Encoding.GetBytes แล้วให้มันแปลงเป็น Base64 string ให้นั่นแหละครับ ขากลับ ก้อแปลงจาก Base64 เป็น Byte Array แล้วเป็น Text อีกที

     

Page 1 of 1 (5 items)