2012-12-19 3 views
1

나는 웹 서버에 우분투를 실행하고 있으며 웹 페이지에 다운로드 할 수있는 파일을 가리키는 링크가 있습니다. 문제는 문자 인코딩으로 인해 404 (찾을 수 없음)가 발생했습니다.Linux 웹 서버 문자 인코딩 불일치에 대한 링크 다운로드

웹 사이트에 Luís이 포함 된 다운로드 링크가 있지만 ls 일 때 서버의 파일 이름은 Lu�s으로 표시됩니다.

이 문자가없는 파일 링크는 아무런 문제가 없지만 "특수 문자"가 있으면 404가 발생합니다.

해결 방법에 대한 의견이 있으십니까?

업데이트 : 나는 로케일을 실행할 때 얻을 :

LANG=en_US.UTF-8 
LANGUAGE=en_US:en 
LC_CTYPE=en_US.UTF-8 
LC_NUMERIC="en_US.UTF-8" 
LC_TIME="en_US.UTF-8" 
LC_COLLATE="en_US.UTF-8" 
LC_MONETARY="en_US.UTF-8" 
LC_MESSAGES="en_US.UTF-8" 
LC_PAPER="en_US.UTF-8" 
LC_NAME="en_US.UTF-8" 
LC_ADDRESS="en_US.UTF-8" 
LC_TELEPHONE="en_US.UTF-8" 
LC_MEASUREMENT="en_US.UTF-8" 
LC_IDENTIFICATION="en_US.UTF-8" 
LC_ALL= 

은하지 그것은 바로? 나는 그것이 utf8을 사용하고 있다는 것을 의미합니까?

+0

예, HTML 페이지 코드 페이지와 Apache는 UTF-8 인 것 같습니다. – fycth

+0

html 코드 내의 모든 charset 참조는 "charset = UTF-8" –

+0

Apache의 httpd.conf는 어떻습니까? 그리고 웹 서버의 로그 파일을 조사 할 수 있습니다. – fycth

답변

1

웹 서버에서 사용하는 로캘은 무엇입니까? 서버 로케일과 HTML 코딩 페이지가 동일하면 좋을 것입니다.

즉, 서버 로케일로 UTF-8을 사용하고 웹 페이지에서 코드 페이지로 UTF-8을 사용해야합니다.

UTF-8 코드 페이지로 HTML 링크가 있지만 서버에 로캘 -1이있는 경우 비슷한 문제가 발생합니다.

따라서 서버의 로케일을 확인해야하며 ls은 HTML 링크에서 사용하는 것과 정확히 동일한 파일 이름을 표시해야합니다.

리눅스에서 로케일을 확인하는 방법

업데이트 : 단지 로케일이 (당신이 당신의 웹 서버로 아파치를 사용하는 경우) 아파치의 기본 코드 페이지를 확인하는 방법

간부 인 - 아파치로 이동 .conf 및 다음과 같이 확인하십시오. AddDefaultCharset utf-8

+0

업데이트 됨 내 질문 –

1

링크는 Lu%C3%ADs (Luís)이어야합니다. 아쉽게도 서버의 파일 이름은 실제로는 Lu%EF%BF%BDs (Lu�s)입니다. 이는 정확하게 만들어지지 않았 음을 의미합니다. 프로그래밍 방식으로 생성 된 경우 파일 이름을 디코딩 할 때 프로그램에서 잘못된 UTF 인코딩을 사용했다고 가정합니다.

ls과 함께 Lu�s이 표시되면 콘솔이 UTF-8이 아니므로 Lu�s (있는 경우)이 표시됩니다. 하지만 그 파일 이름이 엉망이 된 것을 보여줄뿐입니다.이 파일을 만드는 코드를 수정해야합니다.

지금까지 링크 Lu%EF%BF%BDs으로 파일을 다운로드 할 수 있어야하지만 오류 코드로 작성된 파일의 NON-ASCII 문자가 URL에 %EF%BF%BD이 될 수 있기 때문에 이는 실제 해결책이 아닙니다.

귀하의 질문에서 말씀 드릴 수있는 전부입니다.

+0

감사합니다 ... 파일을 다시 업로드하고 파일 이름이 수정되었는지 확인하려고합니다. –

+0

파일을 win에서 Linux로 이동하는 중 ... 이름이 바뀌 었습니다. –