Русский English Тэги View Sergey Zolotaryov's profile on LinkedIn Вход
Как правильно достать имя русского файла в Linux
Постоянная ссылка 07-02-2008 anydoby java

Казалось бы, чего может быть проще - в диалоговом окошке Swing отобразить имя файла. А не тут-то было. В Windows это делается просто - file.getName() и русское название отображается корректно. В линуксе же я наткнулся на бяку - имя файла было перековеркано до неузнаваемости. Думаю, это касается всех файлов, имена которых содержат не только ASCII символы. Итак, рецепт правильного отображения имени файла:


package com.anydoby.translit;

import java.io.File;
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;

public class Utils {

    private final static Charset charset = Charset.defaultCharset();

    private final static boolean defaultCharsetIsAscii = charset.aliases().contains("latin1");
    
    public static String getFileName(File file) {
        String name = file.getName();
        if (defaultCharsetIsAscii) {
            try {
                byte[] bytes = name.getBytes(charset);
                return new String(bytes, "utf-8");
            } catch (UnsupportedEncodingException e) {
                throw new RuntimeException(e);
            }            
        } else {
            return name;
        }
    }
}

сначала мы перекодируем имя файла, которое дает нам Java, учитывая кодировку по умолчанию в системе (обычно это ISO-8859-1), а затем создаем новую строку в кодировке, которую использует Java по умолчанию - utf-8.

Добавить комментарий

Предыдущая статья Слишком большой размер метода Следующая статья Простой табличный LayoutManager для Swing