문제

디렉토리 내에서 파일 목록을 생성하고 싶습니다. 파일 이름 중 일부에는 한자가 포함되어 있습니다.

예 : [试验] .test.txt

다음 코드를 사용하고 있습니다.

require 'find'
dirs = ["TestDir"]
for dir in dirs
    Find.find(dir) do |path|
    if FileTest.directory?(path)
    else
        p path
    end
    end
end

스크립트를 실행하면 파일 목록이 생성되지만 중국어가 탈출됩니다 (백 슬래시로 대체 한 다음 숫자가 이어집니다). 위의 프라이나 이름을 사용하면 다음을 제작합니다.

"testDir/[ 312 324 321 351] test.txt" "testdir/[试验] .test.txt"대신 대신 "TEXT".

중국어를 출력하기 위해 스크립트를 어떻게 변경할 수 있습니까?

도움이 되었습니까?

해결책

루비는 코드에서 유니 코드를 다루고 있음을 알아야합니다. 다음과 같이 kcode를 사용하여 적절한 문자 인코딩을 설정하십시오.

$KCODE = 'utf-8'

UTF-8이 한자에게 충분하다고 생각합니다.

다른 팁

다음 코드는 더 우아하고 '찾기'가 필요하지 않습니다. 작업 디렉토리가 무엇이든 (또는 어떤 디렉토리를 입력하든)에서 파일 목록 (디렉토리는 아님)을 생성합니다.

Dir.entries(Dir.pwd).each do |x|
  p x.encode('UTF-8') unless FileTest.directory?(x)  
end 

그리고 한 레벨의 사용을 파고 들기 위해 :

Dir.glob('*/*').each do |x|
  p x.encode('UTF-8') unless FileTest.directory?(x)  
end

나는 그것을 끝까지 내려갈 수있는 방법이 있다고 확신하지만 Dir.glob('**/*') 내가 옳은 것을 기억하면 전체 파일 시스템을 거치게됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top