길이 함수는 한자가 한 문자 이상인 것으로 가정합니다. 문자 인코딩과 상관없이 Perl에서 문자열의 길이를 어떻게 결정합니까 (중국어 문자를 한 문자로 처리합니까)?Perl에서 문자열의 길이는 문자 인코딩과 무관합니다.
4
A
답변
8
length
함수는 옥텟 (AKA 바이트)이 아닌 문자에 대해 작동합니다. 문자의 정의는 인코딩에 따라 다릅니다. 중국어 문자는 여전히 단일 문자입니다 (인코딩이 올바르게 설정된 경우!). 그러나 한 옥텟 이상의 공간을 차지합니다. 따라서 Perl에서 문자열의 길이는 Perl이 문자열이 있다고 생각하는 문자 인코딩에 따라 다릅니다. 문자 인코딩과 독립적 인 유일한 문자열 길이는 간단한 바이트 길이입니다.
해당 문자열에 UTF-8로 플래그가 지정되고 UTF-8로 인코딩되었는지 확인하십시오. 예를 들어,이 3 산출 :처럼
$ perl -e 'use utf8; print length("长")'
: : 파일에서 한자를 받고있는 경우
$ perl -e 'use Encode; print length(Encode::decode("utf-8", "长"))'
것은 확인이 반면
$ perl -e 'print length("长")'
1을 산출 파일을 읽거나 쓰려면 먼저 파일을 binmode $fh, ':utf8'
에 복사하십시오. 데이터베이스에서 데이터를 가져 오는 경우 데이터베이스가 UTF-8 형식의 문자열을 반환하는지 확인하거나 Encode
을 사용하여 데이터베이스를 확인하십시오.
UTF-8로 모든 것을 가져야한다고 생각하지 않습니다. 문자열에 올바른 인코딩이 지정되어 있는지 확인하기 만하면됩니다. 전 UTF-8 앞뒤로 (그리고 심지어는 옆으로) 갈 것입니다. 비록 유니 코드를위한 링구아 프랑코이고 어디서나 사용하면 더 쉽게 만들 수 있습니다.
비 ASCII 데이터를 처리하려면 perlunicode 매뉴얼 페이지를 읽는 것이 좋습니다.
관련 문제
- 1. 파이썬 문자열의 최대 길이는 얼마입니까?
- 2. 해쉬 할 문자열의 최대 길이는 얼마입니까?
- 3. 표준 : : 문자열의 문자 참조
- 4. 문자열의 마지막 문자 교체
- 5. xslt 문자열의 특수 문자
- 6. 문자열의 최대 문자 수
- 7. 문자열의 특수 문자 수정
- 8. 문자열의 문자 수 표시
- 9. 문자열의 반복 문자 테스트
- 10. 루아에서 문자열의 문자 수정하기
- 11. 문자열의 16 진수 문자
- 12. Ada에서 문자열의 문자 찾기
- 13. 문자열의 문자 교체 비용은?
- 14. 문자열의 중간에서 문자 교체
- 15. Ruby에서 문자열의 문자 찾기
- 16. 문자열의 문자 비교 알고리즘
- 17. ImageMagick : 글꼴 플랫폼과 무관합니다.
- 18. charcter 인코딩과 PHP
- 19. java에서 다른 문자 세트의 바이트 길이는 얼마입니까?
- 20. 파이썬 : 주어진 문자열의 임의의 문자
- 21. 문자열의 유니 코드 문자 - iphone
- 22. JavaScript - 문자열의 소문자 문자 확인
- 23. utf8 문자열의 latin1 문자 감지
- 24. 문자열의 html 문자 엔티티 바꾸기
- 25. 파이썬에서 문자열의 한 문자 바꾸기
- 26. 문자열의 특정 문자 만 허용합니다.
- 27. C 문자열의 특정 문자 확인
- 28. 문자열의 첫 번째 문자 확인
- 29. python : 문자열의 특수 문자 바꾸기
- 30. 안드로이드, 이미지 버튼은 밀도와 무관합니다.
이 중국어 문자와 함께 substr 기능을 어떻게 사용합니까? 이제 세 번째 해결 방법으로 적절한 길이를 얻을 수 있지만 어떻게하면 substr을 중국어 문구에 사용할 수 있습니까? 나는 실제로 A와 같은지보기 위해 B의 부분 문자열을 취하는 중국어 단어 (A와 B)의 부분 문자열을 비교하려고 시도하고있다. – syker
@syker :'substr'은 문자 (octects가 아님)에서 작동하므로'substr' 문자열이 올바른 인코딩으로 태그가 지정되면 올바르게 작동해야합니다. 예를 들면 다음과 같습니다 :'perl -e '는 Encode를 사용합니다; binmode STDOUT, ": utf8"; 내 $ s = 인코딩 : : 디코딩 ("UTF - 8", "长 μ"); print substr ($ s, 1, 1), "\ n" ''당신에게 "μ"를 주어야합니다. –
@syker : BTW, 처음 두 예제는 설명하기 쉽습니다. use utf8;은 Perl에게 스크립트 자체가 UTF-8이므로 "长"문자열에 자동으로 UTF-8로 플래그가 지정됩니다. 세 번째는 실생활에서 가장 유용하지만, 모든 Encode 비즈니스가 문자열 길이와 문자열 인코딩 간의 연결을 보여주기를 원하지 않았습니다. –