다른 텍스트로 된 큰 텍스트 파일이 있습니다. 일부는 단순한 ASCII이며, 일부는 UTF-8이고 일부는 이중 UTF-8과 같습니다.다른 유니 코드 스타일 변환/bash의 유니 코드 문자열 테스트
'Böker'
'für'
을 그리고 여기 less
보여줄 것이다 내용은 다음과 같습니다 : cat
그것을 같이 여기
'BÃ<U+0083>¶ker'
'für'
이 (내가 좀하고 싶습니다 무엇 깨끗하고 ISO-8859- 1) :
'Böker'
'für'
iconv --from-code=UTF-8 --to-code=ISO-8859-1
사용이이다 결과 :
'Böker'
'für'
(동일한 매개 변수)를 두 번 iconv --from-code=UTF-8 --to-code=ISO-8859-1
를 사용하여, 그것은 올바른 O를 제공하지만,뿐만 아니라 ü 해석 (less
출력) :
'Böker'
'f<FC>r'
한 가지 방법 것 bash
에있는 모든 문자열을 테스트해야합니다. 현재이 코드는 유니 코드 형식으로되어 있습니다. 그러나이 코드는 꽤 많이 검색되었지만 적합한 대답을 찾을 수 없었습니다.
다른 접근법은 문자열을 올바른 형식으로 직접 변환하는 프로그램을 가지고 있지만 iconv와 같은 다른 프로그램을 찾을 수 없으며 < 이후로 FC >은 ISO-8859-1에서 완벽하게 유효한 문자이며, "-c"를 사용하거나 "// IGNORE"를 -to-code에 추가하지 않으면 출력이 변경되지 않습니다.
_double-UTF-8_ - 이것은 문제가 아닙니다. 'BÃ Â ¶ker' - 이것은 ö가 너비가 4 옥텟이라는 것을 의미합니다. 하지만 UTF-32 또는 GB18030에서 볼 수있는 graphemes를 얻는 방법에 대해 고민하고 있습니다. UTF-8에서는 NFD에 [표준화 된] (http://unicode.org/reports/tr15/) 인 경우 2 바이트 또는 3 바이트가됩니다. 트랜스 코딩은 손실 될 수 있습니다 (잘못된 인코딩을 사용하여 디코딩하면 파괴적입니다).이 데이터가 버그가있는 변환의 결과라면 정확한 상태가 복구되지 않을 수 있습니다. – McDowell
올바른 인코딩이 아니며 어떤 일이 발생했는지 설명하려고했습니다. 이것은 ö에 대해 같은 값을 재생산합니다 :'echo "ö"| iconv --from-code = ISO8859-1 --to-code = UTF-8 | iconv --from-code = ISO8859-1 --to-code = UTF-8'. 나는 입력 값을 그대로 가져 왔고 생성 된 방법에 영향을주지 않습니다. 문자를 여전히 디코딩해야하는지 여부를 테스트하는 방법은 적어도 있습니까? –
당신이 할 수있는 최선의 방법은 [인코딩 탐지 API] (http://userguide.icu-project.org/conversion/detection)를 시도하는 것입니다. 그러나 이것들은 본질적으로 신뢰할 수 없습니다. "일반 텍스트"를 사용하면 인코딩을 알아야합니다. – McDowell