Когда я разархивирую zip-файл в java, я вижу странное поведение с подчеркнутым символом в имени файлов.Java unzip странный символ (кодировка?)
Syso:
Добавить пользователя Файл: L'Equipe Техника - Папка: спецификации Eval продолжить - Название файла: Capture d'ECRAN 2013-05-29 à 17.24.03.png
Если напечатать строку, мы не видим какой-либо вопрос, но когда я отобразить символ из строки, я получил это:
C aptured 'е CRAN
Вместо того, чтобы:
С а р т у г е д»е С Р А Н
Это вызывает проблемы при написании строки в базе данных. Я не создаю архив, но у меня нет проблем с его открытием с помощью моих инструментов ОС. Это может быть проблемой кодирования, но я не вижу, как ее решить ...
BufferedInputStream bis = new BufferedInputStream(is);
ArchiveInputStream ais = new ArchiveStreamFactory().createArchiveInputStream(bis);
ArchiveEntry entry = null;
// Parcours des entrées de l'archive
while((entry = ais.getNextEntry()) != null) {
System.out.println("Test one");
// on va essayer de ne pas traiter les dossier
if (!entry.isDirectory()) {
String[] filePath = entry.getName().split("/");
List<String> filePathList = new ArrayList<String>();
for (int i=0; i<filePath.length; i++) {
filePathList.add(filePath[i]);
}
// on recupere le dossier qui doit contenir le fichier
Folder targetFolder = getTargetFolder(filePathList.subList(0, filePathList.size()-1), rootFolder, user, scopeGroupId);
String targetFileName = "";
targetFileName = filePathList.get(filePathList.size()-1);
//Ajout du fichier
final int BUFFER = 2048;
FileCacheOutputStream myFile = new FileCacheOutputStream();
int count;
byte data[] = new byte[BUFFER];
while ((count = ais.read(data, 0, BUFFER)) != -1) {
myFile.write(data, 0, count);
}
System.out.println("Add File user : "+user.getFullName()+" -- Folder : "+targetFolder.getName()+" -- File Name : "+targetFileName);
addFile(user, targetFolder, targetFileName, myFile.getBytes());
}
}
«Если я печатаю строку, мы не видели никаких проблем, но когда я показываю символ из строки« Что это значит? Как вы «отображаете символ из строки»? Я вижу, что вы делаете 'System.out.println', но что такое параметр' file.encoding' для Java и какой терминал вы печатаете для использования и ожидания? –
Я «отображаю символ из строки» с помощью цикла, используя длину строки и печатаю символы один за другим. Я думал, что показ того, как я печатал их, был не очень интересным. Как указал RealSkeptic, это не имеет никакого отношения к кодированию в конце. Только акцентированный характер. – Marc
Способ печати может иметь значение, поскольку проблема может быть в данных в строке или в том, как ваш терминал интерпретирует вывод из Java (используют ли они одну и ту же кодировку?) Или в шрифте, который использует терминал для его отображения , В этом случае он сочетал диакритические знаки и прекомбинированные символы, а нормализация - ответ, но в других случаях это не так. –