현재 키의 이름이 int [] 인 파일에 hashmap의 int []를 저장하고 있습니다. 이 정확한 키는 다른 프로그램에서 도달 할 수 있어야합니다. 따라서 나는 영어로만 파일 이름을 변경할 수 없다. 그러나 ISO_8859_1을 파일 이름의 charset으로 사용하더라도 파일은 모두 파일 트리에서 엉망이됩니다. 영문 글자는 정확하지만 특별한 글자는 아닙니다.Java에서 새 파일을 만들 때 라틴 문자를 올바르게 사용할 수 없습니다. 파일 이름이 올바른 문자 대신 이상한 문자를 얻습니다.
/**
* Save array to file
*/
public void saveStatus(){
try {
for(String currentKey : hmap.keySet()) {
byte[] currentKeyByteArray = currentKey.getBytes();
String bytesString = new String(currentKeyByteArray, StandardCharsets.ISO_8859_1);
String fileLocation = "/var/tmp/" + bytesString + ".dat";
FileOutputStream saveFile = new FileOutputStream(fileLocation);
ObjectOutputStream out = new ObjectOutputStream(saveFile);
out.writeObject(hmap.get(currentKey));
out.close();
saveFile.close();
System.out.println("Saved file at " + fileLocation);
}
} catch (IOException e) {
e.printStackTrace();
}
}
리눅스가 문자를 인코딩하는 방법과 관련이 있거나 Java 코드와 관련이있을 수 있습니까?
편집 나는 문제가 OS에있다 생각합니다. 예를 들어 고양이로 텍스트 파일을 볼 때 문제가 동일하기 때문입니다. 그러나 vim은 문자를 올바르게 해독 할 수 있습니다. 이 경우 터미널에서 언어 설정을 변경해야합니다.
문자열의 바이트를 다른 문자 집합으로 변환하지 마십시오. 문자열 내에서 인코딩은 UTF-16이어야하며, UTF-16이어야합니다. 'getBytes()'는 현재 JVM의 기본 charset에서 바이트를 가져옵니다. 'new String (..., CharSet)'주어진 문자셋에 있다고 가정하고 바이트들로부터 문자열을 생성합니다. 이것은 현재의 캐릭터 세트로 추출했기 때문에 분명히 잘못되었습니다. – RealSkeptic
이 파일들을 읽는 프로그램을 수정할 가능성이 있습니까? 나는. 파일 이름의 유효 문자가 파일 시스템에 크게 의존한다는 문제를 피하기 위해 파일 이름 (base64, ...)에 키를 인코딩 할 수 있습니까? – sruetti
@RealSkeptic 어떤 인코딩 매개 변수를 전달해야합니까? – ChristofferAB