2014-12-15 2 views
0

문자열 변환에서 UTF-8로 문제가 발생했습니다. 기본적으로, 나는 DayDescriptionEnum을 개발했다. DayDescriptionEnum은 실제로 요일을 얻고 이에 따라 설명을 반환한다. 아래 코드를 참고하십시오.문자열 UTF-8 변환 문제

public enum DayDescriptionEnum { 

    SUNDAY(1, "Sunday", "\\u0627\\u0644\\u0623\\u062d\\u062f"), 
    MONDAY(2, "Monday", "\\u0627\\u0644\\u0625\\u062b\\u0646\\u064a\\u0646"), 
    TUESDAY(3, "Tuesday", "\\u0627\\u0644\\u062b\\u0644\\u0627\\u062b\\u0627\\u0621"), 
    WEDNESDAY(4, "Wednesday", "\\u0627\\u0644\\u0623\\u0631\\u0628\\u0639\\u0627\\u0621"), 
    THURSDAY(5, "Thursday", "\\u0627\\u0644\\u062e\\u0645\\u064a\\u0633"), 
    FRIDAY(6, "Friday", "\\u0627\\u0644\\u062c\\u0645\\u0639\\u0629"), 
    SATURDAY(7, "Saturday", "\\u0627\\u0644\\u0633\\u0628\\u062a"); 

    private long dayofWeek; 
    private String dayDescriptionEnglish; 
    private String dayDescriptionArabic; 

    private DayDescriptionEnum(long dayofWeek, String dayDescriptionEnglish, String dayDescriptionArabic) { 
     this.dayofWeek = dayofWeek; 
     this.dayDescriptionEnglish = dayDescriptionEnglish; 
     this.dayDescriptionArabic = dayDescriptionArabic; 
    } 

    public long getDayofWeek() { 
     return dayofWeek; 
    } 

    public String getDayDescriptionEnglish() { 
     return dayDescriptionEnglish; 
    } 

    public String getDayDescriptionArabic() { 

     return dayDescriptionArabic; 
    } 
} 


    public static DayDescriptionEnum getDescriptionOfDay(long dayOfWeek){ 
     DayDescriptionEnum dayDescriptionEnum = DayDescriptionEnum.SUNDAY; 

     if(PermitReportConstants.SUNDAY == dayOfWeek){ 
      dayDescriptionEnum = DayDescriptionEnum.SUNDAY; 
     } 

     if(PermitReportConstants.MONDAY == dayOfWeek){ 
      dayDescriptionEnum = DayDescriptionEnum.MONDAY; 
     } 

     if(PermitReportConstants.TUESDAY == dayOfWeek){ 
      dayDescriptionEnum = DayDescriptionEnum.TUESDAY; 
     } 

     if(PermitReportConstants.WEDNESDAY == dayOfWeek){ 
      dayDescriptionEnum = DayDescriptionEnum.WEDNESDAY; 
     } 

     if(PermitReportConstants.THURSDAY == dayOfWeek){ 
      dayDescriptionEnum = DayDescriptionEnum.THURSDAY; 
     } 

     if(PermitReportConstants.FRIDAY == dayOfWeek){ 
      dayDescriptionEnum = DayDescriptionEnum.FRIDAY; 
     } 

     if(PermitReportConstants.SATURDAY == dayOfWeek){ 
      dayDescriptionEnum = DayDescriptionEnum.SATURDAY; 
     } 

     return dayDescriptionEnum; 
    } 

위의 방법은 요일을 소요하고 그에 따라 열거 형을 반환합니다. 이제이 문자열을 표시 할 때 "\ u0627 \ u0644 \ u0623 \ u062d \ u062f"와 같은 설명이 표시됩니다. 나는 연구하고 문자열을 UTF-8 형식으로 변환해야한다는 것을 깨달았다. 그래서 아래 코드를 넣으십시오.

byte[] utf8Bytes = null ; 
     try { 
      utf8Bytes = dayDescriptionEnum.getDayDescriptionArabic().getBytes("UTF-8"); 
      String arabicDescription = new String(utf8Bytes,"UTF-8"); 
      readyToPrintDeliver.setContractDayDescAr(arabicDescription); 
     } catch (UnsupportedEncodingException e) { 
      e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. 
     } 

효과가 없습니다. 내 질문은, 나는 이미 유니 코드로 문자열을 변환했다. 내가 실수를 저지르고 있니? 친절하게 도와주세요.

감사합니다.

+1

문자열에 이중 블랙 슬래시가 있습니다. 두 번째 백 슬래시를 첫 번째 이스케이프 문자로 이스케이프 처리하면 유니 코드 문자가 인식되지 않습니다. 하나의 백 슬래시 만 사용하십시오. – DirkNM

+0

\\을 사용하지 마십시오. \를 사용하십시오. \\ 사용자가 이스케이프 처리를하고 있습니다 – Adem

+2

왜 UTF-8로 변환하고 다시 시작 하시겠습니까? –

답변

7

UTF-8은 여기에서 빨간색 청어입니다. 당신은 모든 다시 을 UTF-8로 변환 할 필요가 없습니다 - 당신이 백 슬래시 탈출하지 않을 수 있도록 당신이 당신의 문자열을 수정해야합니다 : 문자열 리터럴 내에서

SUNDAY(1, "Sunday", "\u0627\u0644\u0623\u062d\u062f"), 
// etc 

\\이 사용됩니다 백 슬래시 문자의 경우 - 원래 코드에서 문자열에 백 슬래시, u 자 및 16 진수가 포함 된 경우 \\이 반복적으로 반복되었습니다. Unicode 이스케이프 시퀀스로 \uXXXX을 사용하여 유니 코드 문자 만 원할 수 있습니다. 위의 코드와

, 당신은 모든 변환 할 필요가 없습니다 - 그냥 사용

readyToPrintDeliver.setContractDayDescAr(dayDescriptionEnum.getDayDescriptionArabic()); 
+0

내 실수. 고마워요 .Jon. 나는 UTF-8로 문자열을 전달한 것과 같은 혼란을 겪었습니다. 왜 다시 변환해야합니까? 다시 변환하지 않았으므로이 작업을 수행했습니다. Lemme 그것을 다시보십시오. – benz

+0

감사합니다. 그것은 효과가 있었다. 이 장소를 단순히 사랑하십시오. 감사. – benz

2

대부분의 IDE는 UTF-8 인코딩을 지원합니다. 유니 코드를 사용하는 것이 더 이식성이 있지만, 의도 한 문자를 코드에 기본적으로 입력 할 수 있다는 것이 더 자연 스럽습니다.

public enum DayDescriptionEnum { 

    SUNDAY(1, "Sunday", "الأحد"), 
    MONDAY(2, "Monday", "الإثنين"), 
    TUESDAY(3, "Tuesday", "الثلاثاء"), 
    WEDNESDAY(4, "Wednesday", "الأربعاء"), 
    THURSDAY(5, "Thursday", "الخميس"), 
    FRIDAY(6, "Friday", "الجمعة"), 
    SATURDAY(7, "Saturday", "السبت"); 

이 & 실행 잘 컴파일 및 아랍어를 읽을 수 있다면, 작업을하고 확인하는 것이 더 쉬울 수 있습니다.