2017-11-26 6 views
1

Netbeans을 사용하여 Java 소프트웨어를 작성하고 있습니다. 내 코드를 디버깅하는 과정에서 다음과 같은 문제가 발생했습니다. 정확하게 동일한 것으로 보이는 두 개의 아랍어 글자를 비교하는 코드가 있습니다. 내 데이터베이스에서 편지를 복사했습니다. 나는 그 코드가 그것들을 평등하게 찾을 것이라고 기대했으나 그렇지 않았다."나타나는대로"두 개의 동일한 아랍어 문자가 NetBeans에서 동일하지 않습니다.

String a = "و"; 
    String b ="و"; 
    System.out.println(a.equals(b)); 

주 : 다음은 내 코드는 내가 키보드를 사용하여 편지를 쓸 때 나는 "true"로의 출력을 얻을 수 있지만, 내가 변수 "A"와 "B"로 데이터베이스에서 복사 할 때. 출력은 false입니다. 왜? 두 문자의 유니 코드 값을 얻을 당신의 성격을 통일

+0

동일한 문자입니까? CodePoint 비교 https://docs.oracle.com/javase/6/docs/api/java/lang/Character.html#codePointAt%28java.lang.CharSequence,%20int%29 –

+0

값을로드하는 코드를 표시하십시오. 데이터베이스에서 문제가있을 수 있습니다. 또한 DB에서 값의 붙여 넣기를 표시 할 수 있다면. – prettyvoid

답변

0

유니 코드 문자를 비교하는 것은 지나치게 어렵지는 않지만 수행중인 작업보다 복잡합니다.

두 개의 글리프를 복사하여 붙여 넣었습니다. 글리프는 코드 포인트의 그래픽 표현입니다. 코드 포인트가 다른 경우 글리프가 유사한 경우도 있습니다. 이 경우 통과해야하는 것으로 나타나면 .equals(...) 테스트에 실패합니다.

이는 여러 가지 이유로 발생할 수 있습니다. 자주 범인은 당신의 성격이 "구성"된다는 것입니다. 일부 시스템을 지원하기 위해 문자는 실제로 기본 코드 포인트와이를 수정하는 추가 코드 포인트로 구성 될 수 있습니다. (두 번째 코드 포인트로 인코딩 된 악센트가있는 일반적인 라틴 문자를 생각해보십시오.) 유니 코드는이를 지원하지만 동일한 조합에 대한 코드 포인트가 하나의 문자로 결합되어 있습니다.

다른 언어의 경우 글리프 표현이 동일하게 나타날 때 .equals(...)의 코드 포인트 비교가 실패하는 다른 유사한 규칙이있을 수 있습니다.

관련 문제