Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Кодировка!!! i need help 
:(
    Опции темы
Ch0bits
  Дата 30.11.2005, 01:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Python Dev.
****


Профиль
Группа: Завсегдатай
Сообщений: 2124
Регистрация: 21.2.2005
Где: Казань

Репутация: 9
Всего: 62



Набросал вот на досуге утилитку, чтобы ssa субтитры в srt перегоняла и замучился с этой проклятой кодировкой!
Я уже и поиском пользовался, подобную тему нашёл, но ничего не смог сделать! smile

Вот исходник:
Код

using System;
using System.Text;
using System.IO;

class Program
{
    static void Main(string[] args)
    {
        // Ищем все SSA файлы в текущей папке
        DirectoryInfo CurDir=new DirectoryInfo(Environment.CurrentDirectory);
        FileInfo[] SSA_Files=CurDir.GetFiles("*.ssa");
        Console.WriteLine("Найдено {0} файлов.",SSA_Files.Length);
        // Последовательная обработка
        foreach (FileInfo SSA_File in SSA_Files)
        {
            String SSA_FileName = SSA_File.FullName;
            Console.WriteLine("Обработка "+SSA_FileName);
            // Погнали!
            StreamReader SR = new StreamReader(SSA_FileName);
            String SRT_FileName = SSA_FileName.ToLower();
            StreamWriter SW = new StreamWriter(SRT_FileName.Replace(".ssa",".srt"));
            int MessageNum = 0; // Номер ссобщения
            String SSA_string;  // Текущая строка
            while ((SSA_string = SR.ReadLine()) != null)
                if (SSA_string.IndexOf("Dialogue:") == 0)
                {
                    int Z = 0; // Позиция запятой в обрабатываемой строке
                    String begin_time="", end_time="";
                    for (int i = 0; i < SSA_string.Length; i++)
                        if (SSA_string[i] == ',')
                        {
                            Z++;
                            switch (Z)
                            {
                                case 1: // Найдено время начала показа сообщения
                                    begin_time = SSA_string.Substring(i+1, 10);
                                    break;
                                case 2: // Найдено время конца показа сообщения
                                    end_time = SSA_string.Substring(i+1, 10);
                                    break;
                                case 9: // Найден текст сообщения
                                    MessageNum++;
                                    SW.WriteLine(MessageNum); // Пишем номер ссобщения
                                    SW.WriteLine(begin_time+" --> "+end_time);
                                    SW.WriteLine(SSA_string.Remove(0, i+1));
                                    SW.WriteLine();
                                    break;
                            }
                        }
                }
            SW.Close();
            SR.Close();
        }
        Console.WriteLine("Преобразование завершено.");
    }
}


Пример ssa файла(обрабатываемая часть), кодировка win1251:
Код

Dialogue: Marked=0,0:00:07.50,0:00:08.67,per,,0000,0000,0000,,Цель в зоне видимости.
Dialogue: Marked=0,0:00:09.05,0:00:10.21,per,,0000,0000,0000,,Вижу цель.
Dialogue: Marked=0,0:00:10.92,0:00:12.51,per,,0000,0000,0000,,Поторопитесь с высадкой!
Dialogue: Marked=0,0:00:12.55,0:00:13.55,per,,0000,0000,0000,,Поторопитесь с высадкой!
Dialogue: Marked=0,0:00:14.18,0:00:15.64,per,,0000,0000,0000,,Все чисто!
Dialogue: Marked=0,0:00:15.76,0:00:17.35,per,,0000,0000,0000,,Все чисто!
Dialogue: Marked=0,0:00:17.51,0:00:18.51,per,,0000,0000,0000,,Пошел!
Dialogue: Marked=0,0:00:19.06,0:00:20.02,per,,0000,0000,0000,,Пошел!


Вот результат(нужна кодировка win1251): smile
Код

1
0:00:07.50 --> 0:00:08.67
???? ? ???? ?????????.

2
0:00:09.05 --> 0:00:10.21
???? ????.

3
0:00:10.92 --> 0:00:12.51
???????????? ? ????????!

4
0:00:12.55 --> 0:00:13.55
???????????? ? ????????!

5
0:00:14.18 --> 0:00:15.64
??? ?????!

6
0:00:15.76 --> 0:00:17.35
??? ?????!

7
0:00:17.51 --> 0:00:18.51
?????!

8
0:00:19.06 --> 0:00:20.02
?????!



smile КАК ЭТО ИСПРАВИТЬ??? smile
PM WWW   Вверх
mr.DUDA
Дата 30.11.2005, 08:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



StreamReader и StreamWriter оба имеют конструкторы с дополнительным аргументом типа System.Text.Encoding. Если читаем файл в кодировке 1251, то StreamReader лучше создавать так:

= new StreamReader(fileName, Encoding.GetEncoding(1251));

Аналогично создаётся StreamWriter. Судя по всему, в приведённом примере файл был зачитан и обработан Ok, но сохранён в юникоде.


--------------------
user posted image
PM MAIL WWW   Вверх
Ch0bits
Дата 30.11.2005, 09:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Python Dev.
****


Профиль
Группа: Завсегдатай
Сообщений: 2124
Регистрация: 21.2.2005
Где: Казань

Репутация: 9
Всего: 62



Заработало, большое спасибо! smile
PM WWW   Вверх
mr.DUDA
Дата 30.11.2005, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



you welcome


--------------------
user posted image
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0465 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.