2011-01-17 6 views
1

뉴스 피드에서 문자열을 파싱 중이며 앱에서 이상한 동작이 나타납니다. 나는이 피드에 더 가깝게보고 있었고 숨겨진 캐릭터가 발견되었습니다. 여기 그 피드에서 가져온 예는 다음과 같습니다이 문자열에 숨겨진 문자는 무엇입니까?

"DAS empresas portuguesas NESTE 파이스"단어 "portuguesas"후

가 일부 문자 것으로 보인다. char가 무엇인지 찾아서 제거 할 수 있습니까?

미리 감사드립니다.

EDIT : 텍스트 복사/붙여 넣기가 완료된 것 같습니다. 인코딩 관련 일 수 있습니까?

+1

은 이스케이프 된 문자입니까? ASCII 코드 또는 유니 코드 번호가 도움이 될 수 있습니다. –

+2

공간입니다. 키보드에서 가장 큰 키를 찾으십시오. –

+2

숨겨진 캐릭터의 경우 웹 페이지에서 어떻게 게시 할 수 있습니까? – skaffman

답변

3

포르투갈어로, 언어 자체의 이름은 'português'입니다. 'ê'는 유니 코드로 코드 포인트 U + EA 또는 라틴 소문자 E, e '다음에 코드 포인트 U + 301, COMBINING CIRCUMFLEX ACCENT가옵니다. 따라서 문자열은 9 일 수 있지만 길이는 10 자일 수 있습니다. 더 긴 형태는 표준화 양식 D (정식 분해에 의해 형성됨)에 있고 더 짧은 것은 NFC (정식 구성에 의해 다음에에 의해 형성됨)에 있습니다.

그러나 단어가 굴절되면 분음 부호가 없어 지므로 명사 'empresas'와 번호 및 성별이 일치하는 'portuguesas'와 같은 단어는 발음 구별을 전혀 포함하지 않아야합니다.

보낸 문자열에 ASCII가 아닌 문자가 하나만 있으며 인쇄중인 문자열입니다. 단어 'país'에 있습니다.

이 UTF-8 입력의 각 논리 코드 포인트 보여줍니다

$ echo "das empresas portuguesas neste país" | perl -CS -ne 'printf "%v02X\n", $_' 
64.61.73.20.65.6D.70.72.65.73.61.73.20.70.6F.72.74.75.67.75.65.73.61.73.20.6E.65.73.74.65.20.70.61.ED.73.0A 

을 그리고 이것은 그것의 각 별도의 바이트 보여줍니다

$ echo "das empresas portuguesas neste país" | perl -C0 -ne 'printf "%v02X\n", $_' 
64.61.73.20.65.6D.70.72.65.73.61.73.20.70.6F.72.74.75.67.75.65.73.61.73.20.6E.65.73.74.65.20.70.61.C3.AD.73.0A 
다음

만 원한다면 그렇게하는 방법입니다 비 ASCII 코드 포인트를 참조하십시오

# logical code points 
$ echo "das empresas portuguesas neste país" | perl -CS -pe 's/[^\x00-\x7F]/sprintf "\x5Cx{%X}", ord $&/ge' 
das empresas portuguesas neste pa\x{ED}s 

# separate bytes 
$ echo "das empresas portuguesas neste país" | perl -C0 -pe 's/[^\x00-\x7F]/sprintf "\x5Cx%X", ord $&/ge' 
das empresas portuguesas neste pa\xC3\xADs 

'나는'코드 포인트 U + ED 될 수있다, 또는 '내가 정기적으로 구현 될 수 있음 '코드 포인트 U + 301, COMBINING ACUTE ACCENT가 뒤 따른다. 그렇다면,이 같이 표시합니다 :

# show the NFD form 
$ perl -CS -le 'print "das empresas portuguesas neste pai\x{301}s"'              
das empresas portuguesas neste país 

# show UTF-8 non-ASCII code points 
$ perl -CS -le 'print "das empresas portuguesas neste pai\x{301}s"' | perl -CS -pe 's/[^\x00-\x7F]/sprintf "\x5Cx{%X}", ord $&/ge' 
das empresas portuguesas neste pai\x{301}s 

# show non-ASCII bytes 
$ perl -CS -le 'print "das empresas portuguesas neste pai\x{301}s"' | perl -C0 -pe 's/[^\x00-\x7F]/sprintf "\x5Cx%X", ord $&/ge' 
das empresas portuguesas neste pai\xCC\x81s 

그것은 스택 오버플로 (또는 뭔가 다른) 가능성이 인쇄되지 않는 문자를 삭제하여 문자열을 재 작성하는 것이 될 수있다. 그래서 우리가 보았던 데이터에 있지 않기 때문에 우리가 볼 수없는 것들이있을 수 있습니다.

0
$ echo "das empresas portuguesas neste país" | od -b 
0000000 144 141 163 040 145 155 160 162 145 163 141 163 040 160 157 162 
0000020 164 165 147 165 145 163 141 163 040 156 145 163 164 145 040 160 
0000040 141 303 255 163 012 
0000045 

게시물에 숨겨진 문자가 표시되지 않습니다.

0

는 여기에서 다운로드 한 RSS에서 오는 경우 : http://feeds.feedburner.com/PublicoEconomia?format=xml 들이 특히 (소문자의 구별, 구두점을위한 3 바이트 UTF-8 문자를 사용 : U + 201D 오른쪽 따옴표 MARK는 UTF-8 : 0xE2 0x80으로 0x9D는해야한다 "portuguesas"다음의 문자). 아마도 코드에서 첫 번째 바이트를 먹고있을 것입니다.

관련 문제