Update: iTunes Thai to Unicode script

ใช้ได้กับ OS X 10.5 10.6 10.7

ก่อนหน้านี้ได้เขียนถึงการแปลงชื่อเพลงใน iTunes ให้เป็นภาษาไทยที่ถูกต้องด้วย applescript ตอนนี้เพิ่งจะรู้ว่า script ที่เขียนยังทำงานได้ไม่ถูกต้อง เหตุเพราะตอนแรกเข้าใจว่า iTunes มันอ่านชื่อเพลงที่เป็น ascii แล้วก็แปลงให้เป็น unicode ด้วย character encoding แบบ Latin-1 (iso 8859-1) ซึ่งจะแปลงไปเป็น Unicode ภาษาไทยได้ตรงๆ

แต่จริงๆ แล้วมันกลายเป็นว่า iTunes ได้แปลงรหัสของตัวอักษรบางตัวออกไปนอกเหนือจาก iso 8859-1 ทำให้การทำงานของ script เดิมผิดพลาด

คราวนี้เลยต้องมาดูว่า iTunes มันแปลงรหัสของตัวอักษรอย่างไร วิธีการที่ใช้ก็คือกำหนดชื่อเพลงใน id3 tag ของไฟล์ mp3 เป็นตัวอักษรตั้งแต่ 128 ไล่ไปจนถึง 255 แล้ว import เข้าไปใน iTunes จากนั้นก็ดูในชื่อเพลงที่ iTunes มันแปลงแล้วว่ามันกลายเป็นอะไรไป

ในการแก้ไข id3 tag นั้นก็ได้เขียนโปรแกรมด้วย Java โดยอาศัย Java ID3 Tag Library เป็นตัวช่วย

ผลที่ได้คือรู้ว่า iTunes ได้แปลงรหัสตัวอักษรในส่วนที่เป็นภาษาไทยของ TIS-620 (รหัสตั้งแต่ 161 จนถึง 251) โดยคิดว่าเป็น Latin ไปดังนี้

iTunes_code_conversion.png
สำหรับตัวอักษรอื่นๆนอกจากรายการข้างต้นนั้น ไม่ได้ถูกเปลี่ยนรหัสตัวอักษรแต่อย่างใด

จากข้อมูลที่ได้มาทั้งหมดก็ต้องเอาไปเขียน script ใหม่ โดยแก้ไขส่วนที่เป็นการแปลงรหัสเป็นอย่างในรูป
Picture 1.png
download ThaitoUnicode.dmg
update: แก้ไข function การแปลงรหัสอีกเล็กน้อย อันเดิมใช้ is เพื่อเปรียบเทียบมันไม่เวิร์ก

update: 12 สิงหาคม 2554 เพิ่ม วิธีติดตั้งและใช้งาน

Facebooktwittergoogle_plusredditpinterestlinkedinmail

23 thoughts on “Update: iTunes Thai to Unicode script”

  1. บทความนี้อ่านแล้วได้ประโยชน์มากเลยค่ะเป็นกำลังใจให้ แล้วจะกลับมาติดตามอีก นะคะ

  2. ขอบคุณครับ บทความของคุณเป็นประโยชน์มากๆครับ
    และมายืนยันว่าใช้ได้ดี

  3. ใช้งานได้ดีครับผมใช้บน Lion ใช้แล้วไม่มีปัญหา ยกเว้นถ้าเพลงมันเยอะมันจะค้างไปชั่วขณะหนึ่ง (ไม่เหมือนกับ Thaitune ที่บอกว่ากำลังทำงานอยู่) แต่ก็ขอขอบคุณมากครับที่ช่วยเขียน script ^^

  4. ขอบคุณมากครับที่ช่วยแชร์แก่คนที่ไม่ค่อยรู้เรื่องพวกนี้ เป็นประโยชน์มากครับ ขอแชร์ต่อนะครับ

  5. ใช้เวลาติดตั้งนานมั้ยครับ ทำไมของผมมันwaiting installation นาน ตอนนี้ก็ยังติดไม่เสร็จเลยครับ
    ขอบคุณครับ

  6. มันใช้เวลาติดตั้งแป๊บเดียวเองครับ ไม่กี่วินาที

  7. แปลงได้หมดอะครับ แต่ข้อมูลตรง “album altist” ไม่แปลงครับ

  8. ใช่ครับ ผมเขียนให้มันแปลงข้อมูลเฉพาะ track name, album, artist ครับ ไม่ได้รวมไปถึง album artist อันนี้ไว้จะเพิ่มเติมให้ต่อไปครับ

  9. ของผมยังไม่ได้ครับ ลองลบThaitunes ออกหมด แล้วลงใหม่ก็ยังไม่ได้ครับ ขึ้น Parameter Error ตลอด แก้ยังครับ สคริปของผมเป็นแบบนี้ครับ

    — Created by Vorasilp Kijchavengkul
    — Copyright © 2007-2012
    — The software is licensed under Open Software License v. 3.0 (OSL-3.0)
    — The copy of the software license agreemnt can be obtained at http://www.opensource.org/licenses/OSL-3.0

    tell application “iTunes”
    set msel to selection
    if (count msel) > 0 then
    set toConfirm to display dialog ((“Convert total of ” & (count msel) as text) & ” items? “) as text
    set btn to button returned of toConfirm
    if (btn is “OK”) then
    repeat with mtrack in msel
    set t_name to name of mtrack
    set t_artist to artist of mtrack
    set t_album to album of mtrack
    set t_album_artist to album artist of mtrack

    set res_name to s’s mconvert(t_name)
    set res_artist to s’s mconvert(t_artist)
    set res_album to s’s mconvert(t_album)
    set res_album_artist to s’s mconvert(t_album_artist)

    set name of mtrack to res_name
    set artist of mtrack to res_artist
    set album of mtrack to res_album
    set album artist of mtrack to res_album_artist

    end repeat
    end if
    else
    display dialog “Please select one or more items.”
    end if

    end tell

    script s
    on mconvert(input)
    set charlist to id of input
    set reslist to {}
    repeat with mchar in charlist
    if (mchar ≥ 161 and mchar ≤ 218) or (mchar ≥ 223 and mchar ≤ 251) then
    set mchar to mchar + 3424
    else if (mchar as integer is 8804) then
    set mchar to 3614
    else if (mchar as integer is 8249) then
    set mchar to 3632
    else if (mchar as integer is 8217) then
    set mchar to 3609
    else if (mchar as integer is 8364) then
    set mchar to 3588
    else if (mchar as integer is 339) then
    set mchar to 3590
    else if (mchar as integer is 8211) then
    set mchar to 3597
    else if (mchar as integer is 8221) then
    set mchar to 3602
    else if (mchar as integer is 8220) then
    set mchar to 3603
    else if (mchar as integer is 960) then
    set mchar to 3612
    else if (mchar as integer is 8719) then
    set mchar to 3613
    else if (mchar as integer is 9674) then
    set mchar to 3639
    else if (mchar as integer is 8250) then
    set mchar to 3664
    end if
    set end of reslist to mchar
    end repeat
    return string id reslist
    end mconvert
    end script

  10. Thaitunes ไม่ต้องใช้ครับ ลบออกไปเลย ที่เมนู script เลือก Thai to Unicode นะครับ ไม่ใช่ Thaitunes

  11. “” vorasilp says:
    January 14, 2012 at 5:07 pm
    Thaitunes ไม่ต้องใช้ครับ ลบออกไปเลย ที่เมนู script เลือก Thai to Unicode นะครับ ไม่ใช่ Thaitunes “”

    ครับ ตอนนี้ของผมเหลือแค่ Thai to Unicode อย่างเดียว แต่ก็ยังขึ้น Parameter Error ตลอดครับ
    ไม่รู้จิงๆว่าเกิดจากอะไร โหลดตัวติดตั้งที่เป็น .dmg แล้วก็ยังเป็นเหมือนเดิม มีวิธีแก้บ้างมั้ยครับ

  12. จาก http://dougscripts.com/itunes/solutions01.php เขาว่าน่าจะเกิดจาก applescript และ itunes หาไฟล์ไม่เจอหรือมีปัญหากับไฟล์ ผมเองก็ไม่เคยเจอปัญหาแบบนี้ ไม่ทราบวิธีแก้ครับ

  13. ดีมากครับ.. มีประโยชน์ ใช้ได้จริง ขอบคุณมากๆ ครับ

  14. windows ใช้ได้ไหมครับ ผมหาสำหรับ windows ไม่ได้เลย – -.

  15. อันนี้สำหรับสำหรับ mac เท่านั้นครับ

    windows ก็มีปัญหานี้ด้วยหรือครับ เพราะปัญหาที่ผู้ใช้ mac เจอ มันเป็นไฟล์ที่สร้างจาก windows พอมาใช้กับ mac เลยเป็นเรื่อง

Leave a Reply

Your email address will not be published. Required fields are marked *