순진한 Perl 6 프로그램은 유니 코드와 관련하여 왕복 안전하지 않습니다.유니 코드 데이터에 대해 Perl 6을 왕복으로 안전하게 만들 수있는 방법은 무엇입니까?
$ perl -CO -E 'say "e\x{301}"' | perl6 -ne '.say' | perl -CI -ne 'printf "U+%04x\n", ord for split //'
U+00e9
U+000a
나는이 문제에 대한 아무것도 볼 수없고, 나는 그것이 매우 충격 찾을 문서를 통해 파고 : 그것은 내부적으로 str을 유형에 대한 정규화 양식 구성 (NFC)를 사용하는 것처럼 나타납니다.
$ perl -CO -E 'say "e\x{301}"' | perl6 -e 'while (my $byte = $*IN.read(1)) { $*OUT.write($byte) }' | perl -CI -ne 'printf "U+%04x\n", ord for split //'
U+0065
U+0301
U+000a
안전하게 펄 6 라운드 트립으로 모든 텍스트 파일을 NFC에 있어야합니까 : 나는 당신이 왕복 텍스트로 다시 바이트 수준으로 떨어 필요가 믿을 수 없어? 문서가 NFD에 있어야한다면 어떻게 될까요? 여기에 뭔가 빠져 있어야합니다. 나는 이것이 의도적 인 행동이라고 믿을 수 없다.
나는 생각합니다. 'perl6'의 모든 문자열은 NFC 형식으로 처리 된 다음 내부적으로 NFG 형식으로 저장됩니다.이 형식은 미리 작성되지 않은 graphemes를 올바르게 처리하는 'perl6'방식입니다. 관련 http://unix.stackexchange.com/a/311280/38906. 적어도 "Str.ords"는 이것에 대해 언급했다 https://docs.perl6.org/type/Str#method_ords – cuonglm
그것은 나에게 광기가 보인다. 내가 구문에 대한 모든 변경 사항을 처리 할 의향이 있었지만, 귀하의 존재 이유가 문자열 처리 (특히 유니 코드 문자열 처리) 일 때 텍스트 파일을 왕복시킬 수는 없다는 것은 어리석은 일입니다. –