[java] Apache Commons는 왜 ‘१२३’숫자를 고려합니까?

에 대한 Apache Commons Lang의 문서에 따르면 StringUtils.isNumeric()‘१२३’문자열은 숫자입니다.

문서의 실수라고 생각했기 때문에 테스트를 실행하여 진술을 확인했습니다. 나는 아파치 코 몬즈에 따라이 발견 입니다 숫자.

이 문자열이 숫자 인 이유는 무엇입니까? 그 캐릭터들은 무엇을 상징합니까?



답변

“CharSequence에는 유니 코드 숫자 만 포함”( 링크 된 문서 인용)이 있기 때문 입니다.

모든 문자는 Character.isDigit다음에 대해 true를 반환합니다 .

숫자를 포함하는 일부 유니 코드 문자 범위 :

  • ‘\ u0030’~ ‘\ u0039’, ISO-LATIN-1 숫자 ( ‘0’~ ‘9’)
  • ‘\ u0660’~ ‘\ u0669’, 아랍어-인도 숫자
  • ‘\ u06F0’~ ‘\ u06F9’, 확장 아랍어-인도 숫자
  • ‘\ u0966’~ ‘\ u096F’, 데바 나가리 숫자
  • ‘\ uFF10’~ ‘\ uFF19’, 전자 숫자

다른 많은 문자 범위에도 숫자가 포함됩니다.

१२३ 데바 나가리 숫자 :


답변

기호 १२३ 은 네팔어 또는 힌디어, 구자라트 어 등과 같은 Devanagari 스크립트를 사용하는 다른 언어의 경우 123과 동일 하므로 Apache Commons의 숫자입니다.


답변

Character#getType캐릭터의 일반 카테고리를 확인하는 데 사용할 수 있습니다 .

System.out.println(Character.DECIMAL_DIGIT_NUMBER == Character.getType('१'));

이렇게하면 true‘१’이 숫자 라는 “증거” 가 인쇄됩니다 .

이제 ‘१’문자의 유니 코드 값을 살펴 보겠습니다.

System.out.println(Integer.toHexString('१'));
// 967

이 숫자의 범위에 데바 나가리 숫자 :이다 – \u0966을 통해 \u096F.

또한 시도하십시오 :

Character.UnicodeBlock block = Character.UnicodeBlock.of('१');
System.out.println(block.toString());
// DEVANAGARI

Devanagari 는 다음과 같습니다.

인도와 네팔의 아부 기다 (알파 음순) 알파벳입니다.

“१२३”은 “123”(기본 라틴 유니 코드)입니다.

독서:


답변

특정 “문자”에 어떤 속성이 있는지 알고 싶다면 (그리고 꽤 많은 속성이 있음) 소스로 직접 이동하십시오 : Unicode.org . 그들은 당신이 알고 싶은 대부분의 것을 보여줄 수있는 조사 도구를 가지고 있습니다.

기억하기 : 유니 코드 컨소시엄은 소프트웨어가 아닌 사양을 생성합니다. 즉, 가능한 한 정확하게 사양을 구현하는 것은 각 소프트웨어 공급 업체의 몫 입니다. 따라서 HTML, JavaScript, CSS, SQL 등과 마찬가지로 다양한 플랫폼, 언어 등이 다릅니다. 예를 들면, 나는 라틴 문자를 원함으로써 마이크로 소프트의 .NET 프레임 워크에서이 문제를 발견 A-Z하고 a-z제대로 것으로 등록하지 않은 – 0x24E9을 통해 코드 0x24B6 포인트를 – char.IsLetter = true( 여기에 버그 리포트 ). 그리고 이로 인해 TextInfo.ToTitleCase()메서드를 호출 할 때와 같이 관련 기능에서 예기치 않은 동작이 발생합니다 ( 여기에서 버그 보고서 ).


답변

‘१२३’기호는 실제로 다음과 같이 숫자 값을 나타내는 힌디어 (기본적으로 산스크리트어 즉 데바 나기 리어에서 유래)에서 파생됩니다.

१ 대표 1

२는 2를 나타냅니다.

그리고 마찬가지로


답변