터미널의 csv 파일에 외국 이름을 가진 파일 목록을 쓰는 방법은 무엇입니까?

터미널의 csv 파일에 외국 이름을 가진 파일 목록을 쓰는 방법은 무엇입니까?

터미널 폴더에 외국어 이름을 가진 파일이 몇 개 있습니다. 터미널에서 " " 하면 ls아래 이미지 오른쪽에 목록이 보입니다.

여기에 이미지 설명을 입력하세요.

이렇게 했더니 ls -t | tail -n +2아래와 같이 실제 캐릭터가 보였습니다.

여기에 이미지 설명을 입력하세요.

두 번째 사진의 원본 캐릭터 파일명 목록을 csv 파일로 쓰고 싶은데요? 이를 수행할 수 있는 방법이 있습니까? 여기에서 매우 유사한 질문을 찾았지만 이 질문의 파일 이름은 외국어가 아니었습니다. 사용하면 이런 느낌이에요ls -t | tail -n +2 > files.csv

여기에 이미지 설명을 입력하세요.

하지만 원래 이름을 기반으로 기존 파일에서 메타 정보를 가져와야 하기 때문에 원래 이름이 포함된 목록이 필요합니다. 여기서 파일 이름은 순서가 없고 파일 수가 다릅니다.

MobaXterm에서 터미널 설정으로 이동하면 문자 집합이 UTF-8(인코딩됨)로 선택됩니다. 또한 UTF-8이 보이는지 확인했습니다.

~$ locale -a
C
C.UTF-8
POSIX

답변1

이 파일 이름은 UTF-8로 인코딩된 것 같습니다. 터미널은 UTF-8이지만 로케일은 그렇지 않습니다. (ASCII라고도 함)과 같은 것을 locale charmap출력할 수 있습니다 . ANSI_X3.4-1968ASCII는 코드 포인트가 127보다 높은 문자를 정의하지 않습니다. 비ASCII UTF-8 문자는 모두 2바이트 이상으로 인코딩되며 모두 127보다 큽니다.

ls?이러한 바이트는 ASCII(현재 로케일 문자 맵)에서 인쇄 가능한 문자를 형성하지 않기 때문에 다음 과 같이 렌더링됩니다 .

문자가 UTF-8에 매핑되는 로케일을 사용해야 합니다. 당신의 목록에쓸 수 있는보고에 따르면 locale -a.locales만 남아 있습니다 C.UTF-8.

달리기:

export LANG=C.UTF-8
locale

$LC_XXX일부 변수가 다른 것으로 설정된 경우 설정을 해제해야 할 수도 있습니다.

Microsoft 제품은 문자로 시작하지 않는 한 UTF-8 파일 자체를 인식하지 못할 수 있습니다 ZERO WIDTH NO-BREAK SPACE (UTF-16에서는 바이트 순서 표시로도 사용되며 UTF-8에서는 바이트 순서에 문제가 없습니다).

이 문자를 추가하고 줄 끝을 Microsoft 형식으로 변환할 수 있습니다.

unix2dos -m < file.csv > file.ms.csv

관련 정보