wget 중국어 난 장 판 해결 방법
6668 단어 wget 난 코드;중국어 난 코드;
색인 디 렉 터 리 에 표 시 된 인 코딩 이 무엇 인지 주의해 야 한 다 는 전제 가 있 습 니 다. 예 를 들 어 일부 사 이 트 는 UTF - 8 (이것 은 비교적 정규 적 이 어야 합 니 다. 중국 어 는 * * 번 거 롭 지 않 고 방법 으로 해결 할 수 있 습 니 다) 이 고 어떤 사 이 트 는 GBK 입 니 다. 파일 의 인 코딩 이나 apache, nginx 의 설정 과 관련 이 있 을 수 있 습 니 다.
1. 다운로드 할 때 ascii 로 저장, 방법 3 과 유사
1
wget --restrict-file-names=ascii -m www.xxx.com/
2. 이름 을 바 꾸 는 소프트웨어 를 사용 하면 비비 가 아 이 를 바 꾸 고 RenamePro 8.0 으로 사용 하기 좋 습 니 다.'고급 파일 이름 변경' 에는 '파일 이름 인 코딩 과 디 코딩', 'ANSI 인 코딩 URL 문자열 을 문자 로 변환' 이 있 으 니 많이 시도 해 보 세 요.
3. 만약 에 안 되면 wget 의 일부 매개 변 수 를 연구 할 수 있 습 니 다. 관련 된 것 은 두 가지 가 있 습 니 다. �Clocal-encoding=ENC IRI (국제 자원 식별 자) 는 ENC 를 로 컬 인 코딩 으로 사용 합 니 다. �Cremote-encoding=ENC 기본 원 격 인 코딩 으로 ENC 를 사용 합 니 다.
방법 1 moper: 이 방법 은 파일 이름 을 ascii 로 바 꾸 고 -- restrict - file - name = ascii 인 자 를 추가 한 다음 python 으로 쓴 프로그램 을 win 이 받 아들 일 수 있 는 인 코딩 으로 바 꾸 는 것 입 니 다.사실 우 리 는 다른 매개 변 수 를 추가 하면 됩 니 다.전체 명령
1
wget --restrict-file-names=nocontrol -m http://xxx.xxx.xxx
1
wget --restrict-file-name=ascii -m http://xxx.xxx.xxx
다운로드 하면 중국어 파일 이름 은 URL 형식 으로 인 코딩 됩 니 다. 예 를 들 어 '2010 구조 사 대회 PPT' 는 '2010% E6% 9E% B6% E6% 9E% 84% E5% B8% 88% E5% A4% E4% BC% 9APPT' 가 됩 니 다.주로 웹 페이지 에 서 는 중국어 URL 을 UTF - 8 로 인 코딩 하고, 윈도 메모리 파일 이름 은 GBK 로 인 코딩 하기 때문이다.그 러 니까т㎡ PPT '는 사실상 GBK 인 코딩 으로 표시 되 는 UTF - 8 인 코딩 파일 이름 이다.이렇게 해서 우 리 는 Python 으로 인 코딩 변환기 만 쓰 면 된다.코드 는 다음 과 같 습 니 다:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
import os, urllib, sys, getopt
class Renamer:
input_encoding = ""
output_encoding = ""
path = ""
is_url = False
def __init__(self, input, output, path, is_url):
self.input_encoding = input
self.output_encoding = output
self.path = path
self.is_url = is_url
def start(self):
self.rename_dir(self.path)
def rename(self, root, path):
try:
if self.is_url:
new = urllib.unquote(path).decode(self.input_encoding).encode(self.output_encoding)
else:
new = path.decode(self.input_encoding).encode(self.output_encoding)
os.rename(os.path.join(root, path), os.path.join(root, new))
except:
pass
def rename_dir(self, path):
for root, dirs, files in os.walk(path):
for f in files:
self.rename(root, f)
if dirs == []:
for f in files:
self.rename(root, f)
else:
for d in dirs:
self.rename_dir(os.path.join(root, d))
self.rename(root, d)
def usage():
print '''This program can change encode of files or directories.
Usage: rename.exe [OPTION]...
Options:
-h, --help this document.
-i, --input-encoding=ENC set original encoding, default is UTF-8.
-o, --output-encoding=ENC set output encoding, default is GBK.
-p, --path=PATH choose the path which to process.
-u, --is-url whether as a URL
'''
def main(argv):
input_encoding = "utf-8"
output_encoding = "gbk"
path = ""
is_url = True
try:
opts, args = getopt.getopt(argv, "hi:o:p:u", ["help", "input-encoding=", "output-encoding=", "path=", "is-url"])
except getopt.GetoptError:
usage()
sys.exit(2)
for opt, arg in opts:
if opt in ("-h", "--help"):
usage()
sys.exit()
elif opt in ("-i", "--input-encoding"):
input_encoding = arg
elif opt in ("-o", "--output-encoding"):
output_encoding = arg
elif opt in ("-p", "--path"):
path = arg
elif opt in ("-u", "--is-url"):
is_url = True
rn = Renamer(input_encoding, output_encoding, path, is_url)
rn.start()
if __name__ == '__main__':
main(sys.argv[1:])
wget 이 다음 명령 행 을 사용 하여 다운로드 한다 면:
1
wget --restrict-file-name=ascii -m http://ebook.elain.org
그러면 다운로드 한 파일 은 "2010% E6% 9E% B6% E6% 9E% 84% E5% B8% 88% E5% A4% A7% E4% BC% 9APPT" 형식 으로 스 크 립 트 를 실행 할 때 다음 명령 을 사용 합 니 다.
1
rename.py -i utf-8 -o gbk -p R:\ebook.elain.org -u
방법 2. wget 소스 코드 변경
moper: 이런 방법 은 추천 하지 않 습 니 다. 귀 찮 기 때문에 저도 테스트 를 하지 않 았 습 니 다. 아마 이런 효과 가 좀 좋 을 것 같 습 니 다.
문장 1 < wget 중국어 난 코드 해결 방안 >
wget 으로 웹 페이지 를 다운로드 할 때 파일 이름 에 ASCII 문자 가 아 닌 다른 특수 문자 가 포함 되 어 있 으 면 이른바 난 코드 가 발생 합 니 다.중국어 난 장 판 문 제 를 해결 하려 면 wget 의 소스 코드 를 수정 할 수 있 습 니 다.URL 문자열 을 인 코딩 하 는 소스 파일 은 url. c 입 니 다.그 중 urlfile_name () 의 기능 은 URL 에 따라 어떤 파일 이름 으로 파일 을 저장 해 야 하 는 지 판단 하 는 것 입 니 다.이 함수 가 append 를 호출 하 였 습 니 다.uri_pathel (), 이 함수 가 FILE 를 호출 했 습 니 다.CHAR_TEST () 매크로 는 URL 의 문자 가 특수 문자 인지 아 닌 지 를 판단 하 는 데 사 용 됩 니 다. (즉, URL 인 코딩 이 필요 한 문자 입 니 다. 물론 중국어 포함).문 제 는 바로 이 매크로 에 게 있다.중국어 의 뜻 을 바 꾸 지 않 기 위해 서 는 중국어 문 자 를 일반 문자 로 취급 해 야 한다.다음 과 같은 FILECHAR_TEST () 매크로:
1
2
3
#define FILE_CHAR_TEST(c, mask) \
((opt.restrict_files_nonascii && !c_isascii ((unsigned char)(c))) || \
(filechr_table[(unsigned char)(c)] & (mask)))
다음으로 변경:
1
2
3
4
#define FILE_CHAR_TEST(c, mask) \
(((opt.restrict_files_nonascii && !c_isascii ((unsigned char)(c))) || \
(filechr_table[(unsigned char)(c)] & (mask))) \
&& !((c|0x0fffffff) == 0xffffffff)) /* */
방법 3, url 수정file_name () 함수 wget 1.12 버 전 소스 코드 에서 url. c 파일 1402 줄 의
1
2
3
for (p = b; p < e; p++)
if (FILE_CHAR_TEST (*p, mask))
++quoted;
으로 변경
1
2
3
for (p = b; p < e; p++)
if (FILE_CHAR_TEST (*p, mask) && !((*p | 0x0fffffff) == 0xffffffff))
++quoted;