powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / И сноваКирелические символы в именах файлов на FreeBSD
19 сообщений из 44, страница 2 из 2
И сноваКирелические символы в именах файлов на FreeBSD
    #38437385
apprentice-novice
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ЛагманА что значит "со стороны консоли"? Когда в терминале выполняете ls, там нормальные имена? со стороны консоли все ????.txt и ??????.xls
...
Рейтинг: 0 / 0
И сноваКирелические символы в именах файлов на FreeBSD
    #38437389
apprentice-novice
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
извиняюсь консоль - хотел сказать терминал
...
Рейтинг: 0 / 0
И сноваКирелические символы в именах файлов на FreeBSD
    #38437470
Лагман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если в терминале руками создать файл, то тоже вопросы?
Если нет, то скорее всего имена портятся ещё на этапе создания.
...
Рейтинг: 0 / 0
И сноваКирелические символы в именах файлов на FreeBSD
    #38437509
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надо дёрнуть ls -LF с опцией ASCII-wrap.
Я искал - хер поймешь как это включить. Вобщем если линуксоиды есть - подскажите.
...
Рейтинг: 0 / 0
И сноваКирелические символы в именах файлов на FreeBSD
    #38437532
avp.mk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
package testfs;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public class TestFS {

    public static void main(String[] args) throws IOException {
        Path baseDir = Paths.get("/путь (сделать латиницей) к папке с русскими именами сохранёнными самбой/где не много файлов");
        
        for (Path path : Files.newDirectoryStream(baseDir)) {
            String name = path.getFileName().toString();
            for (int i = 0; i < name.length(); ++i) {
                System.out.printf("\\u%04x", name.codePointAt(i));
            }
            System.out.println();
        }
    }
}



Запостите что покажет. (и исходные имена!)
...
Рейтинг: 0 / 0
И сноваКирелические символы в именах файлов на FreeBSD
    #38437898
apprentice-novice
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
avp.mk
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
package testfs;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public class TestFS {

    public static void main(String[] args) throws IOException {
        Path baseDir = Paths.get("/путь (сделать латиницей) к папке с русскими именами сохранёнными самбой/где не много файлов");
        
        for (Path path : Files.newDirectoryStream(baseDir)) {
            String name = path.getFileName().toString();
            for (int i = 0; i < name.length(); ++i) {
                System.out.printf("\\u%04x", name.codePointAt(i));
            }
            System.out.println();
        }
    }
}



Запостите что покажет. (и исходные имена!)
Выполнил русское имя файла "Тест.txt" созданное явой прочиталось - u0422ест.t'u0078t
Имя файла с кириллическими символами созданные виндой � до расширения
...
Рейтинг: 0 / 0
И сноваКирелические символы в именах файлов на FreeBSD
    #38438221
avp.mk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На этом тему можно закрывать. Java правильно читаеат имена файлов.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
    public static void main(String[] args) {
        String
                u = "Тест.txt",
                n = "Тест.txt";

        System.out.println(
                u.equals(n)
                ? "Это одинаковые строки"
                : "Это не одинаковые строки");
    }



Имена файлов искажает Samba при при создании файлов на диске. Эту проблему можно решить и при помощи джавы (перекодируя имена файлов созданных самбой..)
...
Рейтинг: 0 / 0
И сноваКирелические символы в именах файлов на FreeBSD
    #38438229
apprentice-novice
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
avp.mk
Эту проблему можно решить и при помощи джавы (перекодируя имена файлов созданных самбой..)
Отсюда поподробнее. Как перекодировать имена файлов если я получаю набор знаков вопросов?
...
Рейтинг: 0 / 0
И сноваКирелические символы в именах файлов на FreeBSD
    #38438233
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
apprentice-noviceavp.mkЭту проблему можно решить и при помощи джавы (перекодируя имена файлов созданных самбой..)
Отсюда поподробнее. Как перекодировать имена файлов если я получаю набор знаков вопросов?
Не надо ничего перекодировать. Это путь в никуда. Надо найти в самбе настройку которая отвечает
за кодовую страницу и исправить это.
...
Рейтинг: 0 / 0
И сноваКирелические символы в именах файлов на FreeBSD
    #38438241
apprentice-novice
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonНе надо ничего перекодировать. Это путь в никуда. Надо найти в самбе настройку которая отвечает
за кодовую страницу и исправить это.

Какую кодировку посоветуете Cp1251 или KOI8_R или UTF
...
Рейтинг: 0 / 0
И сноваКирелические символы в именах файлов на FreeBSD
    #38438271
avp.mk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonНе надо ничего перекодировать. Это путь в никуда. Надо найти в самбе настройку которая отвечает
за кодовую страницу и исправить это.
А уже созданные файлы выкинуть?

P.S. Конечно лучше по-человечески настроить самбу.
...
Рейтинг: 0 / 0
И сноваКирелические символы в именах файлов на FreeBSD
    #38438342
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
apprentice-novicemaytonНе надо ничего перекодировать. Это путь в никуда. Надо найти в самбе настройку которая отвечает
за кодовую страницу и исправить это.

Какую кодировку посоветуете Cp1251 или KOI8_R или UTF
Давай так. Я уже дал совет что нужно вопрос перенести в форум по Unix.
По сабжу скажу что Java работает со строками в Unicode. NTFS, UFS/ZFS скорее
всего тоже хранят имена файлов в многобайтных и международных кодировках.
Дефект скорее всего в настроках сервера. Где именно эта настройка я не знаю
т.к. не специалист в этих ваших самбах.
...
Рейтинг: 0 / 0
И сноваКирелические символы в именах файлов на FreeBSD
    #38438477
apprentice-novice
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonapprentice-noviceпропущено...


Какую кодировку посоветуете Cp1251 или KOI8_R или UTF
Давай так. Я уже дал совет что нужно вопрос перенести в форум по Unix.
По сабжу скажу что Java работает со строками в Unicode. NTFS, UFS/ZFS скорее
всего тоже хранят имена файлов в многобайтных и международных кодировках.
Дефект скорее всего в настроках сервера. Где именно эта настройка я не знаю
т.к. не специалист в этих ваших самбах.
Спасибо огромное все заработало
...
Рейтинг: 0 / 0
И сноваКирелические символы в именах файлов на FreeBSD
    #38439843
apprentice-novice
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Новые проблемы связанные с локализацией. Только я все настроил пришёл злой админ и открутил локализацию UTF8. Теперь у меня другая беда при помощи кусочка проги любезно предоставленным acp.mk (с небольшой модернизацией) я вычитываю имена файлов правильно но вот найти эти файлы на диске не магу. Вот небольшой примерчик

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
package direx;

import java.io.File;
import java.io.UnsupportedEncodingException;

import java.io.*;
import java.nio.file.*;

/**
 *
 * @author Виталий
 */
public class DirEx {
    private static int i;

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws IOException {
        String str,name; 
        File [] af=null;
        File f;
        int faInd=0;

        f = new File("/home/rsync/k0");
        //f= new File("d:/test");
        Path baseDir=Paths.get("/home/rsync/k0");
        //Path baseDir=Paths.get("d:/test");
        
        System.out.println(f.list().length);
        af=new File[f.list().length];
        for (Path path:Files.newDirectoryStream(baseDir)){
        //File f = new File("d:/Test","UTF8");
            name=path.getFileName().toString();
            str=new String(name.getBytes(),"KOI8_R");
            //System.out.println(baseDir+"\\"+str);
            //str=new String(str.getBytes(),"Cp866");
            f=new File(baseDir+"/"+str); 
            af[faInd]=f;       
            faInd++;            
        }    
        for(int i=0; i<af.length; i++){
          
            System.out.println(af[i].getName()+" FileExist "+af[i].exists());
          
            
        }
    }
    
}


допустим у нас в папочке лежит Лист Microsoft Excel.xlsx
результат роботы следующий
Лист Microsoft Excel.xlsx FileExist false
...
Рейтинг: 0 / 0
И сноваКирелические символы в именах файлов на FreeBSD
    #38439850
apprentice-novice
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Простите за неточность
Код: java
1.
str=new String(name.getBytes(),"UTF8");


Да и если заходиш через терминал система не отображает русские имена вместо них знаки вопросов. Можно ли єто решить методами JAVA?
...
Рейтинг: 0 / 0
И сноваКирелические символы в именах файлов на FreeBSD
    #38439884
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты можешь провести остаток жизни в попытках угадать какой маппинг кодовой
страницы там реально работает. В скобках замечу что в некоторых криво настроенных
протоколах маппинг может быть произведён дважды наприм win1251->koi8->utf16.
У меня нет алгоритмов как искать решение этой задачи. Самое лучшее что ты можешь
сделать это 1) Сымитировать работу пользователя. Создай файл с названием
АБВГДЕ....ЄЮЯ.xls. со стороны юзера (на Windows). 2) ПОсмотри как он создался.
на стороне FreeBSD. 3) Если терминал не настроен (а он обычно не настроен)
то смотри в АSCIIwrap или короче говоря узри коды символов имени файла
в кодировке Unicode. 4) Прими решение о том как нужно обрабатывать эти
замаппленные имена.

И последнее. Купи бутылку коньяка и подружись с админом штоли...
...
Рейтинг: 0 / 0
И сноваКирелические символы в именах файлов на FreeBSD
    #38439993
avp.mk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
apprentice-noviceНовые проблемы
У вас на диске есть один файл. Например "еҐа­п.txt".
Вы читаете имя файла который есть на диске, получаете - "еҐа­п.txt", перекодируете - получаете другое имя например "херня.txt".

Спрашиваете а есть-ли файл "херня.txt" на диске. Что-же ответит вам файловая система.. (когда она только что сказала что есть "еҐа­п.txt", а других нет).

DirEx.java
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
package direx;

import java.io.*;
import java.nio.file.*;
import static java.nio.file.Files.*;

public class DirEx {

    private static final Path BASE_DIR = Paths.get("/home/rsync/k0");

    public static void main(String[] args) throws IOException {
        for (Path path : newDirectoryStream(BASE_DIR)) {
            String name = path.getFileName().toString();

            printIsExist(name);
            printIsExist(new String(name.getBytes(), "KOI8_R"));
            printIsExist(new String(name.getBytes(), "Cp1251"));
            printIsExist(new String(name.getBytes(), "Cp866"));
            printIsExist(new String(name.getBytes(), "UTF-8"));
            printIsExist(new String(name.getBytes(), "UTF-16"));
            printIsExist(new String(name.getBytes(), "UTF-32"));

            printIsExist(new String(name.getBytes("Cp1251"), "Cp1252"));

            System.out.println();
        }
    }

    private static void printIsExist(String fileName) {
        System.out.print("Файл \t\"");
        System.out.print(fileName);
        System.out.println(
                exists(BASE_DIR.resolve(fileName))
                ? "\"\t - существует"
                : "\"\t - не существует"
        );
    }
}

...
Рейтинг: 0 / 0
И сноваКирелические символы в именах файлов на FreeBSD
    #38440290
apprentice-novice
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
avp.mkapprentice-noviceНовые проблемы
У вас на диске есть один файл. Например "еҐа­п.txt".
Вы читаете имя файла который есть на диске, получаете - "еҐа­п.txt", перекодируете - получаете другое имя например "херня.txt".

Спрашиваете а есть-ли файл "херня.txt" на диске. Что-же ответит вам файловая система.. (когда она только что сказала что есть "еҐа­п.txt", а других нет).

DirEx.java
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
package direx;

import java.io.*;
import java.nio.file.*;
import static java.nio.file.Files.*;

public class DirEx {

    private static final Path BASE_DIR = Paths.get("/home/rsync/k0");

    public static void main(String[] args) throws IOException {
        for (Path path : newDirectoryStream(BASE_DIR)) {
            String name = path.getFileName().toString();

            printIsExist(name);
            printIsExist(new String(name.getBytes(), "KOI8_R"));
            printIsExist(new String(name.getBytes(), "Cp1251"));
            printIsExist(new String(name.getBytes(), "Cp866"));
            printIsExist(new String(name.getBytes(), "UTF-8"));
            printIsExist(new String(name.getBytes(), "UTF-16"));
            printIsExist(new String(name.getBytes(), "UTF-32"));

            printIsExist(new String(name.getBytes("Cp1251"), "Cp1252"));

            System.out.println();
        }
    }

    private static void printIsExist(String fileName) {
        System.out.print("Файл \t\"");
        System.out.print(fileName);
        System.out.println(
                exists(BASE_DIR.resolve(fileName))
                ? "\"\t - существует"
                : "\"\t - не существует"
        );
    }
}


Да там UTF-8 но при попытке обратится к файлу к примеру Вася.txt он говорит что такого файла нет. Хотя я вижу что он есть и я его вычитал просто в системе он отображается крокозябрикаи.
...
Рейтинг: 0 / 0
И сноваКирелические символы в именах файлов на FreeBSD
    #38440337
apprentice-novice
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Точнее не вычитал а прочитал имя. Но файловая система это имя не принимает. То-есть говорит что такого файла с таким именем нет когда я пытаюсь получить к примеру размер файла.
...
Рейтинг: 0 / 0
19 сообщений из 44, страница 2 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / И сноваКирелические символы в именах файлов на FreeBSD
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]