2009-11-25 5 views
8

여러 URL에서 비 ASCII 문자를 URL 이스케이프 (백분율 인코딩)하려고합니다. 저는 이러한 URL에서 이미지 및 사운드 클립과 같은 리소스를로드하는 플래시 응용 프로그램을 사용하고 있습니다. 파일 이름이 비 ASCII 문자과 같이 포함 할 수 있기 때문에 :URL Internet Explorer 용 중국어/일본어 유니 코드 문자 이스케이프

%E6%97%A5%E6%9C%AC%E8%AA%9E.jpg

: 日本語.jpg 을 내가 UTF-8 문자 인코딩 한 다음 유니 코드 바이트를 퍼센트 탈출하여 그들을 탈출, 다음을 얻을 수 있습니다 이 파일 이름은 Internet Explorer 이외의 다른 브라우저에서 앱을 실행할 때 잘 작동합니다. Firefox, Safari 및 Chrome을 사용해 보았습니다. 내가 IE에서 응용 프로그램을 실행할 때 (시도 모두 6, 8)과 사운드 클립을로드하려고, 내가 얻을 : Error #2044: Unhandled ioError을하고 URL이 같은 뭔가 손상되었습니다

æ¥æ¬èª.jpg

모든 이 문제를 해결하는 방법에 대한 생각? 이것은 로컬 파일 시스템 URL을 사용하여 플래시 응용 프로그램을 테스트하는 것입니다. 나는 또한 인터넷 탐색기와 같은 파일을 찾을 수없는 것으로 나타났습니다 : file:///C:/%E6%97%A5%E6%9C%AC%E8%AA%9E.jpg는, 비록 크롬/파이어 폭스가와 경로

C:\日本語.jpg

와 파일에 대한 잘 부하를 디코딩됩니다 편집

내 문제는 다음 ActionScript 코드 조각에서 발견 된 것과 같은 생각 :

import flash.display.Loader; 
import flash.net.URLRequest; 
... 
var ldr:Loader; 
var req:URLRequest = new URLRequest("日本語.jpg"); 
ldr = new Loader(); 
ldr.load(req); 

문자열 日本語.jpg을 사용하면 IE에서 작동하지만 다른 브라우저에서는 %E6%97%A5%E6%9C%AC%E8%AA%9E.jpg 문자열을 사용할 수 있습니다. 필요한 모든 브라우저에서 작동하는 단일 양식입니다. %u 인코딩을 시도하고 백분율 이스케이프 또는 이스케이프 처리되지 않은 양식으로 http 요청 헤더를 Content-Type: text/html; charset=utf-8으로 설정했습니다.

+0

Windows는 파일 이름에 UTF-16을 사용합니다. 따라서 '% 65 % E5 % 67 % 2C % 8A % 9E'을 시도하십시오. – Gumbo

+0

UTF-16 이름의 주사위가 없지만 IE는 여전히 그것을 찾을 수 없습니다. – Bear

+0

관련 : http://stackoverflow.com/questions/75980/best-practice-escape-or-encodeuri-encodeuricomponent – cregox

답변

1

죄송합니다. 해결책은 없지만 여기에 어떤 일이 벌어지고 있는지에 대한 정보는 적어도 더 있습니다. (아마 이미 많은 부분을 알고있을 것입니다.하지만 아마도 다른 독자가 솔루션을 찾는데 도움이 될 것입니다.) "공식적인"url 인코딩 사양은 생성하는 것과 같은 이스케이프 된 URL을 디코딩하는 방법에 대해 문을 활짝 열어 놓은 것처럼 보입니다. - UTF-8 문자 (파이어 폭스 등이 그것들을 해석하고있는 것처럼) 또는 ASCII 문자 (IE가 그것들을 해석하고 있기 때문에)를 나타 내기 위해 의도 된 이스케이프 된 엔티티입니까? 나는 의도 된 디코딩 전략을 강제하는 방법을 모른다.

그냥 질문 : 당신이 그들을 전혀 피하지 않고 URL에 유니 코드를 남겨두면 어떤 나쁜 일이 일어나고 있습니까? 비록 내가 많은 경험이 없지만, 나는 어딘가에서 URL의 유니 코드를 피할 필요가있는 날이 우리 뒤에 있다는 것을 기억하고 있다고 생각했다. 그것에 대해 잘못 될 수 있습니다 ...

+0

대부분의 브라우저는 유니 코드 문자가 포함 된 URL로 확인됩니다. 필자는 Flex 애플리케이션을 구축하고 있습니다. URL은 사운드 클립, 이미지, 영화 등과 같은 외부 자산에 대한 링크입니다. 플래시 플러그인에서 컴파일 된 .swf를 실행하면 이러한 애셋은 유니 코드 문자가 url/percent는 UTF-8을 이스케이프 처리했습니다. 그렇지 않으면로드에 실패합니다. 이러한 % 이스케이프 처리 된 파일 이름은 Internet Explorer를 제외한 모든 브라우저에서 정상적으로 작동합니다. – Bear

+0

URI/URL (RFC 3986)은 비 ASCII 문자의 인코딩이 필요합니다. 반면에 IRI (RFC 3987)는 대부분의 유니 코드 문자가 인코딩되지 않도록합니다. IRI는 이전 URI/URL 표준을 대체하는 새로운 표준이지만 많은 시스템이 아직 IRI를 구현하지 않습니다. IRI 사양은 IRI를 URI/URL로 또는 그 반대로 변환하기위한 규칙을 제공합니다. –

1

IE는 UTF-8을 HTTP URL로 사용하지만 파일 URL에 대해서는 확신하지 못합니다. 약 10 년 전 IE 팀의 일부로 동작을 테스트했지만). HTML에서 URL을 사용하는 경우 실제로는 문자열 리터럴 (페이지 인코딩이 UTF-8 인 경우) 또는 숫자 문자 참조 (& #dddd;)를 사용하는 것이 좋습니다. IE는 일반적으로 HTTP 엔티티의 경우 UTF-8, 로컬 파일 시스템 상호 작용의 경우 UTF-16이 될 적절한 인코딩으로 문자를 변환합니다.

실제로는 HTTP 파서가 아닌 URL 이스케이프가 필요한 HTTP입니다.

1

URI가 잘못 구문 분석되는 부분 만 인코딩하도록하십시오. 예를 들어 &,? 및 공백을 인코딩합니다. 그 밖의 모든 것을 그대로두면 매력처럼 작동합니다.

여전히 문제가 발생하는 경우 http 헤더에서 content-type을 utf로 설정해야 할 수 있습니다. Content-type과 같은 것 : text/html; charset = UTF-8.

+0

불행히도, Flex와 함께 작업하는 프레임 워크는 이스케이프 처리되지 않은 비 ASCII 문자를 특히 잘 처리하지 못합니다. 이 주변에 적절한 방법이 있는지 찾아야합니다. Flex 프레임 워크에서 HTTP 헤더에 액세스 할 수 있는지 알아보기 위해 고차원 솔루션을 기대했습니다. – Bear

1

왜 유니 코드 이스케이프 시퀀스를 사용하지 않는가? 무슨 뜻인지보기 위해 HTML 웹 페이지의 본문에이를 붙여 넣습니다

<script type="text/javascript"> 
     var fileName = "日本語.jpg"; 
     document.write(escape(fileName)); 
    </script> 

내가 %의 u65E5 %의 u672C의 %의 u8A9E.jpg를 얻을.

+0

이것은 불행히도 나를 위해 작동하지 않습니다. 이것은 URL을 이스케이프하는 표준 방법입니까? 파이어 폭스는 주어진 경로에 '㐀 .jpg'라는 이름의 파일에 대해 'file : ///.../% u3400.jpg'과 같은 형식의 URL을로드 할 수 없습니다. – Bear

+0

죄송합니다, 자바 스크립트 이스케이프/이스케이프에서만 작동합니다. 내가 인코딩을 시도하고 내 localhost에 대해 작동합니다. elswhere에서 언급했듯이 헤더에 UTF-8을 보내는 서버에 알려야 할 수도 있습니다. – Ishmael

+0

호스트 페이지에 인코딩 메타 태그가있는 경우 UTF-8을 사용하는 서버를 설득하기 위해해야합니다. 나는 생각할 것이다. 아마도. – Ishmael

1

테스트 한 내용에서 IE는 인코딩 된 파일 URL을 처리하지 않지만 일반적인 http URL을 처리하므로 문제가 될 수 있습니다. 어떻게로드하는지 모르겠지만 그 문제를 체크 아웃해야합니다.

+0

이것은 문제로 판명되었습니다. 플래시 액티브 -x 컨트롤 (IE)은 인코딩되지 않은 파일 URL 만로드하는 반면 플래시 플러그인 (Chrome, Firefox, Safari 등)은 인코딩 된 파일 URL 만로드합니다. 플래시 플레이어가 다른 액티브 X 사용 인코딩되지 않은 URL을 입니다 경우 사용하는 URL 인코딩 된 URL을 당신이 저를 요구하는 경우에 좀 해키 : 내가 지금까지 생각 할 수 있었던 유일한 해결 방법입니다. – Bear

1

file : // 프로토콜은 OS 영역 설정에 따라 다르며 시스템 설정이 중국어이지만 영어로 설정되어 있지 않으면 IE에서이를 수행 할 수 없습니다.