파일 이름에 허용되는 문자
운영 체제에 따라 파일 이름에서 허용되는 문자 목록을 어디에서 찾을 수 있습니까? (예 : Linux의 경우 문자 :
는 파일 이름에 허용되지만 Windows에는 허용되지 않습니다)
Wikipedia Filename 페이지 에서 시작해야 합니다. 적당한 크기의 테이블 ( 파일 이름 제한 비교 )이 있으며 많은 파일 시스템에 예약 된 문자가 나열되어 있습니다.
또한 MS-DOS 와 같은 예약 된 파일 이름을 포함하여 각 파일 시스템에 대한 기타 정보가 많이 CON
있습니다. 필자는 include 파일을 짧게 하고 컴파일러가 중단 된 이유를 알아내는 데 30 분을 보냈 const.h
을 때 한 번 물 렸기 때문에 언급했습니다 con.h
.
입력 콘솔 과 정확히 동일 하도록 DOS 에서 장치의 확장명을 무시했습니다 (물론 컴파일러는 헤더 파일을 계속 입력 하기를 기다렸습니다 ).con.h
con
Windows OS에서 파일을 작성하고 파일 \
이름 과 같이 유효하지 않은 문자를 제공하십시오 . 결과적으로 파일 이름에 유효하지 않은 문자가 모두 포함 된 팝업이 나타납니다.
메인 플레이어 파일 시스템에만 관심이 있다면 파일 시스템 비교를 살펴 보십시오.
- 윈도우 (FAT32, NTFS)를 제외한 모든 유니 코드
NUL
,\
,/
,:
,*
,"
,<
,>
,|
- Mac (HFS, HFS +) :
:
또는/
- 리눅스 (EXT [2-4])을 제외한 모든 바이트
NUL
또는/
그래서 어떤 바이트를 제외하고는 NUL
, \
, /
, :
, *
, "
, <
, >
, |
당신이 파일을 가질 수 없습니다 / 폴더를 호출하지 .
나 ..
(물론)과 더 제어 문자.
/
Finder에서 Mac OS X (현재 MacOS) 에 대해 더 정확하게 설명 :
하는 것은 Unix 파일 시스템에서 해석됩니다 .
Apple이 Classic Mac OS에서 이동할 때 이전 버전과의 호환성을 위해 수행되었습니다.
/
Finder에서 파일 이름에 a 를 사용하는 것이 합법적이며 터미널에서 동일한 파일을 보면으로 표시됩니다 :
.
그리고 다른 방법으로도 작동합니다 /
. 터미널과 함께 파일 이름에 a를 사용할 수 :
는 없지만 a 는 OK이며 /
Finder에 a 로 표시됩니다 .
일부 응용 프로그램은 혼동을 피하기 위해 또는 이전 Classic Mac OS에서 논리를 유지했거나 플랫폼 간의 이름 호환성을 위해 두 문자를 더 제한하고 제한 할 수 있습니다.
"영어 로캘"파일 이름의 경우이 기능이 훌륭합니다. 업로드 된 파일 이름을 삭제하는 데 이것을 사용하고 있습니다. 파일 이름은 디스크의 어떤 것에도 연결되어 있지 않으며 파일을 다운로드 할 때 사용되므로 경로 검사가 없습니다.
$file_name = preg_replace('/([^\x20-~]+)|([\\/:?"<>|]+)/g', '_', $client_specified_file_name);
기본적으로 Windows 및 기타 OS에서 인쇄 할 수없고 예약 된 모든 문자를 제거합니다. 다른 로케일 및 기능을 지원하기 위해 패턴을 쉽게 확장 할 수 있습니다 .
다음은 파이썬에서 파일 이름을 정리하는 코드입니다.
import unicodedata
def clean_name(name, replace_space_with=None):
"""
Remove invalid file name chars from the specified name
:param name: the file name
:param replace_space_with: if not none replace space with this string
:return: a valid name for Win/Mac/Linux
"""
# ref: https://en.wikipedia.org/wiki/Filename
# ref: https://stackoverflow.com/questions/4814040/allowed-characters-in-filename
# No control chars, no: /, \, ?, %, *, :, |, ", <, >
# remove control chars
name = ''.join(ch for ch in name if unicodedata.category(ch)[0] != 'C')
cleaned_name = re.sub(r'[/\\?%*:|"<>]', '', name)
if replace_space_with is not None:
return cleaned_name.replace(' ', replace_space_with)
return cleaned_name
참고 URL : https://stackoverflow.com/questions/4814040/allowed-characters-in-filename
'IT박스' 카테고리의 다른 글
@Value가 포함 된 Spring Expression Language (SpEL) : 달러 대 해시 ($ 대 #) (0) | 2020.07.20 |
---|---|
WPF Numeric UpDown 컨트롤은 어디에 있습니까? (0) | 2020.07.20 |
AngularJS : HTTP 인터셉터에 서비스 주입 (순환 종속성) (0) | 2020.07.20 |
Android-스크롤 가능한 제약 조건 레이아웃을 만드는 방법은 무엇입니까? (0) | 2020.07.20 |
동일한 서버의 다른 포트가 도메인 간으로 간주됩니까? (0) | 2020.07.20 |