Gặp vấn đề khi chuyển dữ liệu từ Unicode về

Java/Windows/.NET conversion utility

Moderator: quân

Gặp vấn đề khi chuyển dữ liệu từ Unicode về

Postby AnhTho » Mon Nov 15, 2010 5:00 am

Dear Admin,
Tôi đang gặp vấn đề khi chuyển từ Unicode qua TCVN3 dựa vào code của UnicodeConverter. Nhưng nó không chuyển được đối với rất nhiều chữ như â, ê, ú, ...
Admin có thể giúp tôi giải quyết vấn đề này được không?
Đoạn code sau là customize theo hướng dẫn của Mr.Quân cho trường hợp chuyển đổi ngược lại. Tôi chuyển từ String Unicode qua String TCVN3.
Code: Select all
public class ConvertUnicodeToTCVN3 extends Converter{
    final char[] TCVN3_char = {'\u00FC', '\u00FB', '\u00FE', '\u00FA', '\u00F9', '\u00F7', '\u00F6',
            '\u00F5', '\u00F8', '\u00F1', '\u00F4', '\u00EE', '\u00EC', '\u00EB', '\u00EA', '\u00ED',
            '\u00E9', '\u00E7', '\u00E6', '\u00E5', '\u00E8', '\u00E1', '\u00E4', '\u00DE', '\u00D8',
            '\u00D6', '\u00D4', '\u00D3', '\u00D2', '\u00D5', '\u00CF', '\u00CE', '\u00D1', '\u00C6',
            '\u00BD', '\u00BC', '\u00AB', '\u00BE', '\u00CB', '\u00C9', '\u00C8', '\u00C7', '\u00CA',
            '\u00B6', '\u00B9', '\u00AD', '\u00A6', '\u00AC', '\u00A5', '\u00F2', '\u00DC', '\u00AE',
            '\u00A8', '\u00A1', '\u00F3', '\u00EF', '\u00E2', '\u00BB', '\u00E3', '\u00DF', '\u00DD',
            '\u00D7', '\u00AA', '\u00D0', '\u00CC', '\u00B7', '\u00A9', '\u00B8', '\u00B5', '\u00A4',
            '\u00A7', '\u00A3', '\u00A2'};
    final char[] Unicode_char = {'\u1EF9', '\u1EF7', '\u1EF5', '\u1EF3', '\u1EF1', '\u1EEF', '\u1EED',
            '\u1EEB', '\u1EE9', '\u1EE7', '\u1EE5', '\u1EE3', '\u1EE1', '\u1EDF', '\u1EDD', '\u1EDB',
            '\u1ED9', '\u1ED7', '\u1ED5', '\u1ED3', '\u1ED1', '\u1ECF', '\u1ECD', '\u1ECB', '\u1EC9',
            '\u1EC7', '\u1EC5', '\u1EC3', '\u1EC1', '\u1EBF', '\u1EBD', '\u1EBB', '\u1EB9', '\u1EB7',
            '\u1EB5', '\u1EB3', '\u00F4', '\u1EAF', '\u1EAD', '\u1EAB', '\u1EA9', '\u1EA7', '\u1EA5',
            '\u1EA3', '\u1EA1', '\u01B0', '\u01AF', '\u01A1', '\u01A0', '\u0169', '\u0129', '\u0111',
            '\u0103', '\u0102', '\u00FA', '\u00F9', '\u00F5', '\u1EB1', '\u00F3', '\u00F2', '\u00ED',
            '\u00EC', '\u00EA', '\u00E9', '\u00E8', '\u00E3', '\u00E2', '\u00E1', '\u00E0', '\u00D4',
            '\u0110', '\u00CA', '\u00C2'};

    final String[] TCVN3_cap = {"\u0041\u00E0", "\u0041\u1EA3", "\u0041\u00E3", "\u0041\u00E1",
            "\u0041\u1EA1", "\u0045\u00E8", "\u0045\u1EBB", "\u0045\u1EBD", "\u0045\u00E9",
            "\u0045\u1EB9", "\u0049\u00EC", "\u0049\u1EC9", "\u0049\u0129", "\u0049\u00ED",
            "\u0049\u1ECB", "\u004F\u00F2", "\u004F\u1ECF", "\u004F\u00F5", "\u004F\u00F3",
            "\u004F\u1ECD", "\u0055\u00F9", "\u0055\u1EE7", "\u0055\u0169", "\u0055\u00FA",
            "\u0055\u1EE5", "\u0059\u1EF3", "\u0059\u1EF7", "\u0059\u1EF9", "\u0059\u00FD",
            "\u0059\u1EF5", "\u0102\u1EB1", "\u0102\u1EB3", "\u0102\u1EB5", "\u0102\u1EAF",
            "\u0102\u1EB7", "\u00C2\u1EA7", "\u00C2\u1EA9", "\u00C2\u1EAB", "\u00C2\u1EA5",
            "\u00C2\u1EAD", "\u00CA\u1EC1", "\u00CA\u1EC3", "\u00CA\u1EC5", "\u00CA\u1EBF",
            "\u00CA\u1EC7", "\u00D4\u1ED3", "\u00D4\u1ED5", "\u00D4\u1ED7", "\u00D4\u1ED1",
            "\u00D4\u1ED9", "\u01A0\u1EDD", "\u01A0\u1EDF", "\u01A0\u1EE1", "\u01A0\u1EDB",
            "\u01A0\u1EE3", "\u01AF\u1EEB", "\u01AF\u1EED", "\u01AF\u1EEF", "\u01AF\u1EE9",
            "\u01AF\u1EF1"};
    final String[] Unicode_cap = {"\u00C0", "\u1EA2", "\u00C3", "\u00C1", "\u1EA0", "\u00C8",
            "\u1EBA", "\u1EBC", "\u00C9", "\u1EB8", "\u00CC", "\u1EC8", "\u0128", "\u00CD", "\u1ECA",
            "\u00D2", "\u1ECE", "\u00D5", "\u00D3", "\u1ECC", "\u00D9", "\u1EE6", "\u0168", "\u00DA",
            "\u1EE4", "\u1EF2", "\u1EF6", "\u1EF8", "\u00DD", "\u1EF4", "\u1EB0", "\u1EB2", "\u1EB4",
            "\u1EAE", "\u1EB6", "\u1EA6", "\u1EA8", "\u1EAA", "\u1EA4", "\u1EAC", "\u1EC0", "\u1EC2",
            "\u1EC4", "\u1EBE", "\u1EC6", "\u1ED2", "\u1ED4", "\u1ED6", "\u1ED0", "\u1ED8", "\u1EDC",
            "\u1EDE", "\u1EE0", "\u1EDA", "\u1EE2", "\u1EEA", "\u1EEC", "\u1EEE", "\u1EE8", "\u1EF0"};

    /**
     * Converts Unicode to TCVN3
     */
    public String convert(String strUnicode) {
        for (int i = 0; i < Unicode_char.length; i++) {
            strUnicode = strUnicode.replace(Unicode_char[i], TCVN3_char[i]);
        }

        strUnicode = replaceString(strUnicode, Unicode_cap, TCVN3_cap );

       
        return strUnicode;
    }
}

Cảm ơn Admin nhiều.
Best regards,
MH
AnhTho
 
Posts: 2
Joined: Wed Nov 10, 2010 5:12 am

Postby quân » Wed Nov 17, 2010 1:32 am

Chuyển ngược lại không chỉ có đảo lại mà còn phải sắp xếp lại thứ tự các array elements để tránh sự trùng lặp giữa các ký tự đã chuyển và sẽ chuyển. Vấn đề này cũng gặp phải trong công đoạn chuyển sang Unicode; thứ tự hiện tại có cũng từ lý do đó.

Thí dụ, Unicode char '\u1EF3' chuyển thành TCVN3 char '\u00FA' ở phần đầu của array, rồi ở phần sau '\u00FA' lại bị chuyển sang 1 char khác. Lỗi xảy ra ở ngay điểm đó. Bạn sắp xếp lại (re-order, re-arrange) các array elements sao để 1 char đã được chuyển không bị chuyển thêm lần nữa, nghĩa là 1 ký tự chỉ qua 1 lần chuyển duy nhất.
quân
 
Posts: 236
Joined: Sat Nov 16, 2002 1:51 am
Location: Oxnard, CA - USA

Postby AnhTho » Wed Feb 09, 2011 2:53 am

Quân giải thích rõ hơn dùm được không? mình chưa rõ lắm.
Nếu bạn cho example thì càng tốt. Cảm ơn nhiều.
AnhTho
 
Posts: 2
Joined: Wed Nov 10, 2010 5:12 am


Return to UnicodeConverter

Who is online

Users browsing this forum: No registered users and 1 guest

cron