
방금 Linux 상자와 NginX를 사용하여 새 웹 서버를 만들었습니다. 대부분의 콘텐츠에서 올바르게 작동하는 것 같습니다.
방금 Windows Server 상자에 있던 사이트를 변환했으며 대부분의 콘텐츠와 기능(HTML 및 JavaScript)이 정상적으로 전송되었습니다. 그러나 나는 NginX가 악센트 문자(예: é,è,ô 등)를 포함하는 이미지 이름(아마도 다른 파일도??)에 문제가 있는 것 같다는 것을 발견했습니다.
파일이 한 움큼만 있으면 수동으로 파일 이름을 바꿀 수 있지만 수동 프로세스를 실행 불가능하게 만드는 수백 개(어쩌면 수천 개)가 있습니다. 누군가 이러한 악센트 문자로 파일 이름을 쉽게 바꿀 수 있는 방법을 제공할 수 있습니까?
감사합니다..RDK
편집: 이전 사이트의 원래 변환에는 "windows-1252"를 사용하는 많은 페이지가 있었고 일부는 "문자 집합"에 "UTF-8"을 사용했습니다. 나중에는 특수 문자에 대한 페이지 콘텐츠를 일반적으로 "검은 다이아몬드?"로 표시하는 데 문제가 있었습니다. 상징. 다른 하나는 JavaScript에 문제가 있고 일부 디스플레이 문제도 있는 것 같았습니다. 해당 문제에 대한 웹 검색 후 모든 "charset=" 값을 모든 문제를 해결한 많은 브라우저의 기본값인 "iso-8859-1"로 변경했습니다. 그런데 이제 파일 이름에 특수 문자가 있는 문제가 발생했습니다.
답변1
발음 구별 부호를 제거하는 한 가지 방법펄의rename
:
이름을 바꿔야 하는 경우발음 구별 부호ASCII에 해당:
rename -u utf8 '
BEGIN{use Text::Undiacritic qw(undiacritic)}
s/.*/undiacritic($&)/e
' éééé.txt
rename(éééé.txt, eeee.txt)
또 다른 방법은해독공익사업. Debian/Ubuntu 및 기타 배포판과 함께 패키지로 사용할 수 있습니다.
또 다른 마지막 방법은 다음을 기반으로 이 스크립트를 사용하는 것입니다.변환(1)프랑스어 프로젝트에서 영어로 번역됨: forum.ubuntu-fr.org:
잘못된 문자 세트를 utf8로 변경하려고 합니다. (제가 쓴 대본은 아니지만,라포뉴71) 문제 해결사가 될 수 있습니다.
#!/bin/bash
VERSION="v0.04"
#---------------------------------------------------------------------------------------
# This script allows to loop the "convmv" utility that allows converting file names coded in
# something other than UTF-8 to UTF-8
# Restart the script with the ALLCODES argument if no result has been found
#---------------------------------------------------------------------------------------
# here are the colors of the text displayed in the shell
RED="\\033[1;31m"
NORMAL="\\033[0;39m"
BLUE="\\033[1;36m"
GREEN="\\033[1;32m"
echo
echo -e "$GREEN $0 $NORMAL $VERSION"
echo
echo "----------------------------------------------------------
This script allows to loop the 'convmv' utility that allows converting file names coded in
something other than UTF-8 to UTF-8. Restart the script with the ALLCODES argument if no result
has been found.
----------------------------------------------------------"
# The main loop launches convmv tests to "visually" detect the original encoding
# We only loop over the iso-8859* and cp* code families as they are the most likely ones (EBCDIC codes have also been removed from the list)
CODES_LIST="
iso-8859-1
iso-8859-2
iso-8859-3
iso-8859-4
iso-8859-5
iso-8859-6
iso-8859-7
iso-8859-8
iso-8859-9
iso-8859-10
iso-8859-11
iso-8859-13
iso-8859-14
iso-8859-15
iso-8859-16
cp437
cp737
cp775
cp850
cp852
cp855
cp856
cp857
cp860
cp861
cp862
cp863
cp864
cp865
cp866
cp869
cp874
cp932
cp936
cp949
cp950
cp1250
cp1251
cp1252
cp1253
cp1254
cp1255
cp1256
cp1257
cp1258
"
# We check if the convmv utility is installed
path=`which convmv 2> /dev/null`
if [ -z "$path" ]; then
echo -e "$RED ERROR: convmv is not installed, please install it by typing:"
echo
echo -e "$BLUE sudo apt-get install convmv "
echo
echo -e "$RED ==> program exit"
echo
echo -e "$NORMAL"
exit 1
fi
# To loop over all the codepages supported by convmv, the ALLCODES argument must be provided
if [ "$1" = "ALLCODES" ]; then
CODES_LIST=`convmv --list`
echo
echo -e "$RED Check which original encoding seems correct (press 'y' and validate if waiting for display)$NORMAL"
echo
fi
# Main loop of the program
for CODAGE in $CODES_LIST; do
echo -e "$BLUE--- Encoding hypothesis: $RED $CODAGE $BLUE---$NORMAL"
echo
# echo -e "$RED Press 'y' and validate if no list is displayed $NORMAL"
convmv -f $CODAGE -t utf-8 -r * 2>&1 | grep -v Perl | grep -v Starting | grep -v notest | grep -v Skipping > /tmp/affichage_convmv.txt
NOMBRE_FICHIERS=`cat /tmp/affichage_convmv.txt | wc -l`
if [ $NOMBRE_FICHIERS -eq 0 ]; then
echo
echo -e "$RED No filename to convert " $NORMAL
echo
echo -e "$BLUE Exiting program ... $NORMAL"
echo
rm /tmp/affichage_convmv.txt 2>/dev/null
exit 0
fi
# sed 's .. ' source.txt ==> this removes the first 2 characters from a string
echo -e $GREEN "Original filenames coded in $CODAGE: " $NORMAL
# ALTERNATIVE cat /tmp/affichage_convmv.txt | cut -f 2 -d '"' | sed 's .. '
cat /tmp/affichage_convmv.txt | cut -f 2 -d '"'
echo
echo -e $GREEN "Filenames converted to UTF-8: " $NORMAL
# ALTERNATIVE cat /tmp/affichage_convmv.txt | cut -f 4 -d '"' | sed 's .. '
cat /tmp/affichage_convmv.txt | cut -f 4 -d '"'
echo
echo -n -e $GREEN "Found encoding? $RED [N]$NORMAL""on /$RED o$NORMAL""ui /$RED q$NORMAL""uit: "
read confirm
echo
# request for file conversion using convmv
if [ "$confirm" = O ] || [ "$confirm" = o ];then
echo -e "$BLUE Convert filenames now from encoding $CODAGE? $NORMAL"
echo -e "$BLUE ==> convmv -f $CODAGE -t utf-8 * --notest $NORMAL"
echo -n -e $GREEN "Confirm conversion $RED [N]$NORMAL""on /$RED o$NORMAL""ui /$RED r$NORMAL""ecursive: "
read confirm
echo
case $confirm in
O|o) convmv -f $CODAGE -t utf-8 * --notest 2>/dev/null
echo
echo -e "$BLUE File name conversion done... $NORMAL" ;;
R|r) convmv -f $CODAGE -t utf-8 * -r --notest 2>/dev/null
echo
echo -e "$BLUE Recursive file name conversion done... $NORMAL" ;;
*) echo -e "$BLUE Exiting program... $NORMAL" ;;
esac
echo
rm /tmp/affichage_convmv.txt 2>/dev/null
exit 0
# request for program exit
elif [ "$confirm" = Q ] || [ "$confirm" = q ];then
echo -e "$BLUE Exiting program... $NORMAL"
echo
rm /tmp/affichage_convmv.txt 2>/dev/null
exit 0
fi
clear
done
rm /tmp/affichage_convmv.txt 2>/dev/null
답변2
Notepad++, Sublime, VSCode 또는 문자 세트 전환을 지원하는 기타 텍스트 편집기를 사용하여 각 파일을 열어야 합니다. 문자 세트를 UTF-8로 전환한 다음 파일을 저장합니다. Linux에서 직접 파일을 편집하는 경우 다음을 사용하는 것이 좋습니다.아이콘각 파일을 UTF-8 인코딩으로 변환합니다.
그런 다음 모든 텍스트 기반 파일을 UTF-8 문자 집합으로 변환한 후 nginx를 테스트하면 문자가 표시됩니다. 그렇지 않은 경우 다음 줄을 추가해 볼 수도 있습니다( 서버 구성이 있는 파일에서) nginx.conf
..conf
charset UTF-8;
파일과 웹 서버는 동일한 문자 집합이어야 하므로 모든 것을 UTF-8로 변환하는 것이 향후 이러한 문제를 방지하는 가장 간단한 방법입니다.