문제

자바에서 강조 된 모음을 위해 숯 문자를 입력하려고했지만 컴파일러는 다음과 같은 것을 말합니다. 불광 문자 그대로

이것이 제가하려는 일입니다.

 char [] a = {'à', 'á', 'â', 'ä' };

유니 코드를 사용해 보았습니다 '\u00E0' 그러나 어떤 이유로 그들은 내 코드와 일치하지 않습니다.

 for( char c : string.toCharArray() ) {
     if( c == a[i] ) {
         // I've found a funny letter 
     }
 }

그만큼 if 내가 끈에 무엇을 넣더라도 진실로 평가하지 마십시오.

여기에 있습니다 완전한 프로그램 나는 코딩하려고한다.

도움이 되었습니까?

해결책

코드는 올바른 인코딩으로 컴파일해야합니다.

javac -encoding UTF-8 Foo.java

어딘가에 인코딩 불일치가있을 것입니다.

public class Foo {
  char [] a = {'à', 'á', 'â', 'ä' };  
}

UTF-8으로 저장된 위의 코드는 16 진 덤프가되어야합니다.

70 75 62 6C 69 63 20 63 6C 61 73 73 20 46 6F 6F         public class Foo
20 7B 0D 0A 20 20 63 68 61 72 20 5B 5D 20 61 20          {__  char [] a
3D 20 7B 27 C3 A0 27 2C 20 27 C3 A1 27 2C 20 27         = {'__', '__', '
C3 A2 27 2C 20 27 C3 A4 27 20 7D 3B 20 20 0D 0A         __', '__' };  __
7D 0D 0A 0D 0A                                          }____

코드 포인트 U+00e0 (à)의 UTF-8 값은 C3 A0.

코드는 올바른 인코딩으로 컴파일해야합니다.

javac -encoding UTF-8 Foo.java

결합 시퀀스 U+0061 U+0300으로 à가 표시 될 가능성이 있습니다. 이것이 NFD 양식 (텍스트 항목의 기본값으로 사용한 텍스트 편집기를 본 적이 없습니다). 처럼 Thorbjørn Ravn Andersen 포인트 uxxxx 탈출 시퀀스를 항상 사용하는 것이 종종 낫습니다. 덜 모호합니다.

또한 입력 장치 (파일/콘솔 등)를 확인해야합니다.

최후의 수단으로서 당신은 당신의 것을 버릴 수 있습니다 char16 진수 System.out.format("%04x", (int) c); 그리고 수동으로 해독 해보십시오 캐릭터 검사관 그들이 무엇인지 알아 내기 위해.

다른 팁

유니 코드 chacters가 작동하려면 Javac이 쓰여진 것과 동일한 인코딩으로 읽어야한다고 확신해야합니다.

uxxxx 표기법 만 사용하여 많은 어려움을 겪게됩니다.

유니 코드 문자 값을 찾고 양식의 리터럴 사용 \uxxxx.

u+00e는 무덤 악센트가 있습니다.

char aacute = '\u00e1';

다음 질문은 문자열이 어디에서 왔는지입니다. 이 캐릭터가 있다고 확신합니까? 작곡 된 캐릭터로? 16 진로 일부를 인쇄하고 살펴보십시오.

정규화해야 할 수도 있습니다 (Java 1.6 또는 ICU4J와 함께).

이것은 빠른 테스트에서 나에게 효과가있는 것 같았습니다.

static char [] a = {'à', 'á', 'â', 'ä' };


    public static boolean foundMatch(String s){

        boolean test = false;
        for(int i=0;i < a.length;i++){
            String t = String.valueOf(a[i]);
            test = s.contains(t);
            if (test) return true;
    }
        return test;
    }

당신은 당신이 달성해야 할 것을 언급하지 않습니다 (즉, 문자열에서 강조 된 캐릭터를 찾아야하는 이유), 입력에 악센트가있는 캐릭터가 있는지 확인하는 것보다 더 많은 일을해야한다고 추측 할 것입니다. . 이미 알고있는 것을 말할 위험이 있습니다.

  • 텍스트 문자열에서 필터링 해야하는 경우 블랙리스트 대신 화이트리스트를 사용하는 것이 좋습니다.
  • 강조에 관계없이 알파벳순으로 정렬 해야하는 경우 사용하십시오. java.text.collator 롤-당신의 소유 시스템 대신.
  • 악센트 캐릭터를 '기본'문자로 교체 해야하는 경우 콜레이터 다시 도움이되어야하지만 (내부의 분해 물건), 전에는 이것을하지 않았으므로 정확히 어떻게 해야하는지 말할 수 없습니다.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top