Перейти к содержимому

Фотография

Вопрос - ОтветЗадал вопрос - получил ответ...


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 764

#501
topcraze

topcraze
  • В доску свой
  • 2 009 сообщений

Кодировки же (например UTF-8, KOI8-R) это стандарты преобразования

так.. давайте таки не путаться в терминологии :)

UNICODE - стандарт

UTF-8, 16,7 и иже с ними - кодировки по стандарту UNICODE

это не преобразование, а тупое сопоставление кода символа, к примеру, 0x0430 = "А".. все и никаких преобразований

в старших системах, по умолчанию, все приложения должны работать с таблицей UNICODE - это довольно жесткая рекомендация MS, где-то в MSDN  я это видела..

если вдруг оказывается, что приложение таки UNICODE не поддерживает, то тогда настройка, скрин которой вы приводите, позволяет вручную выбрать нужный язык для приложений, неподдерживающих UNICODE(при этом эта системная настройка никак не будет влиять на кодировку содержимого файлов, хранящегося где-то там на диске..).

так?

 

теперь по поводу вопроса пользователя... 

если я правильно поняла ваше предложение, ему следует самому написать утилитку, которая возьмет коды из его файлов и сопоставит их к UNICODE?

так?

 

Полезны они в интернетах, т.к. позволяют часть текста (английский, пробелы, цифры и спецсимволы) передавать в 1 байт, а все остальное 2-мя, 3-мя и т.д. имеем экономию трафика.

:eek:

нет!

отдельный, передающийся или хранящийся блок текста(где бы он ни был - в интернетах ли, на диске ли и еще где там..) всегда находится в одной какой-то кодировке, ровно до того момента, пока хозяин текста не решит ее сменить.. представлять часть текста кодировкой в 1 байт, другую часть текста в 2 байта - это какой-то изврат, простите...хотя, да, можно и так, конечно, изгалиться.. 

сколько байт используется под символом зависит от кодировки..


  • 0

#502
Fail

Fail
  • Постоялец
  • 406 сообщений
Сколько же вы тут написали :)
Так как задача была срочная, я просто вставил в программку костыль, который перебирает каждую фамилию, имя и отчество посимвольно и заменяет символы. Если найден определенный символ, соответствующий казахской букве в ANSI, то он заменяется соответствующим символом юникода.
 
вот как выглядит костыль.  Только не смейтесь :)
 

        public string CharChange(string iString)
        {
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < iString.Length; i++)
            {
                switch ((int)iString[i])
                {
                    case 1112:
                        sb.Append("ә");
                        break;
                    case 1108:
                        sb.Append("ғ");
                        break;
                    case 1116:
                        sb.Append("қ");
                        break;
                    case 1109:
                        sb.Append("ң");
                        break;
                    case 1169:
                        sb.Append("ө");
                        break;
                    case 1118:
                        sb.Append("ұ");
                        break;
                    case 1111:
                        sb.Append("ү");
                        break;
                    case 1115:
                        sb.Append("һ");
                        break;
                    case 1110:
                        sb.Append("і");
                        break;
                    case 1032:
                        sb.Append("Ә");
                        break;
                    case 1028:
                        sb.Append("Ғ");
                        break;
                    case 1036:
                        sb.Append("Қ");
                        break;
                    case 1029:
                        sb.Append("Ң");
                        break;
                    case 1168:
                        sb.Append("Ө");
                        break;
                    case 1038:
                        sb.Append("Ұ");
                        break;
                    case 1031:
                        sb.Append("Ү");
                        break;
                    case 1035:
                        sb.Append("Һ");
                        break;
                    case 1030:
                        sb.Append("І");
                        break;
                    default:
                        sb.Append(iString[i]);
                        break;
                }
            }
            return sb.ToString();
        }
 
 
В итоге 58260 строк из 548 файлов залились в  SQL Server за 26 секунд.
Задача закрыта.
Всем спасибо.

  • 0

#503
.ctor

.ctor
  • Свой человек
  • 988 сообщений

Так как задача была срочная, я просто вставил в программку костыль, который перебирает каждую фамилию, имя и отчество посимвольно и заменяет символы. Если найден определенный символ, соответствующий казахской букве в ANSI, то он заменяется соответствующим символом юникода.


Правильный костыль)
  • 0

#504
topcraze

topcraze
  • В доску свой
  • 2 009 сообщений
вот как выглядит костыль.

 

 

отработало и хорошо, больше не грешите ср1251 не используйте :D

один вопрос - а коды русских букв соответствуют юникоду? в смысле операция sb.Append(iString[i]); символ из cp1251 переводит код в юникод, да?


Сообщение отредактировал topcraze: 18.08.2014, 13:08:32

  • 0

#505
.ctor

.ctor
  • Свой человек
  • 988 сообщений
Мой костыль аналогичный.
    bool __kaz_prepaired = false;
    const System::Char __unicode_kaz[18]={L'Ә',L'Ғ',L'Қ',L'Ң',L'Ө',L'Ұ',L'Ү',L'Һ',L'І',L'ә',L'ғ',L'қ',L'ң',L'ө',L'ұ',L'ү',L'һ',L'і'};
    System::Char __ansi_kaz[18];
    
    void __prepaire_kaz()
    {
        const char ___chrs[18] = {0xBD, 0x81, 0x8D, 0x8C, 0x8A, 0x80, 0x8F, 0x8E, 0xB2, 0xBE, 0x83, 0x9D, 0x9C, 0x9A, 0x90, 0x9F, 0x9E, 0xB3};
        System::String ^___ansi_kaz = gcnew System::String(___chrs, 0, sizeof(___chrs));
        for (int i=0; i < 18; i++)
            __ansi_kaz[i]=___ansi_kaz[i];
        __kaz_prepaired = true;
    }
    
    System::String^ __kaz_unicode_2_ansi_convert(System::String ^src)
    {
        if (!__kaz_prepaired)
            __prepaire_kaz();

        System::String ^result = src;
        for (int i=0; i<18; i++)
            result = result->Replace(__unicode_kaz[i], __ansi_kaz[i]);
        return result;
    }
    
    System::String^ __kaz_ansi_2_unicode_convert(System::String ^src)
    {        
        if (!__kaz_prepaired)
            __prepaire_kaz();

        System::String ^result = src;
        for (int i=0; i<18; i++)
            result = result->Replace(__ansi_kaz[i], __unicode_kaz[i]);
        return result;
    }

Сообщение отредактировал .ctor: 18.08.2014, 14:26:53

  • 0

#506
.ctor

.ctor
  • Свой человек
  • 988 сообщений

отработало и хорошо, больше не грешите ср1251 не используйте :D
один вопрос - а коды русских букв соответствуют юникоду? в смысле операция sb.Append(iString[i]); символ из cp1251 переводит код в юникод, да?

Строка уже в юникоде. System::String не умеею по другому в принципе работать. Преобразование из 1251 в юникод делается при чтении файла, когда получаем String.
казахские символы просто не правильные, т.к. кодовая страница немного другая (что была раньше при сохранении и сейчас).
  • 0

#507
topcraze

topcraze
  • В доску свой
  • 2 009 сообщений

Преобразование из 1251 в юникод делается при чтении файла, когда получаем String.

вопрос был по c# коду.. там не видно, что делается с исходной строчкой )) хотя, 99%, что стрингбилдер тоже сам все прекрасно преобразует, но мало ли..

 

 

зы: так интересно на управляемый с++ смотреть.. ))


  • 0

#508
.ctor

.ctor
  • Свой человек
  • 988 сообщений

зы: так интересно на управляемый с++ смотреть.. ))


Ага, особенно когда столкнетесь с массивами и индексированными свойствами классов  :lol:

out параметры функций тоже доставляют. зато быстро)


  • 0

#509
topcraze

topcraze
  • В доску свой
  • 2 009 сообщений
Ага, особенно когда столкнетесь с массивами и индексированными свойствами классов :lol: out параметры функций тоже доставляют. зато быстро)

надеюсь, не столкнусь.. мой интерес чисто созерцательный :D

классического с/с++ вполне хватает для моих задач ))

а для управляемого кода я c# возьму :D он как-то поприятнее


Сообщение отредактировал topcraze: 18.08.2014, 14:57:27

  • 0

#510
.ctor

.ctor
  • Свой человек
  • 988 сообщений

надеюсь, не столкнусь.. мой интерес чисто созерцательный :D
классического с/с++ вполне хватает для моих задач ))
а для управляемого кода я c# возьму :D он как-то поприятнее


Я тоже так думал, пока мне не дали ядро самописанной БД на C/C++ и GUI приложение под .Net и сказали поженить.
и чтоп быстро  :lol:


Сообщение отредактировал .ctor: 18.08.2014, 14:59:33

  • 0

#511
topcraze

topcraze
  • В доску свой
  • 2 009 сообщений

Я тоже так думал, пока мне не дали ядро самописанной БД на C/C++ и GUI приложение под .Net и сказали поженить. и чтоп быстро :lol:

партия сказала - "Надо!", комсомол ответил - "Есть!" :)

знакомо ))

 

по сабжу - как на CLI перевести char в wchar_t и обратно? что-то мне подсказывает, что должно быть легко и непринужденно, но пару-тройку лет назад, в целях самообразования задумав написать такой тестик, я ушла в какие-то дебри.. хоть и реализовала, да


  • 0

#512
.ctor

.ctor
  • Свой человек
  • 988 сообщений

по сабжу - как на CLI перевести char в wchar_t и обратно? что-то мне подсказывает, что должно быть легко и непринужденно, но пару-тройку лет назад, в целях самообразования задумав написать такой тестик, я ушла в какие-то дебри.. хоть и реализовала, да

Самый простой что я нашел. Используется default encoding. Но можно и углубиться :D
  char ___chrs[18] = {0xBD, 0x81, 0x8D, 0x8C, 0x8A, 0x80, 0x8F, 0x8E, 0xB2, 0xBE, 0x83, 0x9D, 0x9C, 0x9A, 0x90, 0x9F, 0x9E, 0xB3};
  System::String ^___ansi_kaz = gcnew System::String(___chrs, 0, sizeof(___chrs));
  //дальше можно получить System::Char и преобразовать его к Int16 он же wchar

  • 0

#513
topcraze

topcraze
  • В доску свой
  • 2 009 сообщений

вот похоже это и есть те дебри.. :(

через 33 типа :mad:

 

впрочем, возможно, мне это показалось дебрями, потому что с управляемыми типами не работала раньше


  • 0

#514
.ctor

.ctor
  • Свой человек
  • 988 сообщений

вот похоже это и есть те дебри.. :(
через 33 типа :mad:
 
впрочем, возможно, мне это показалось дебрями, потому что с управляемыми типами не работала раньше


Все те же типы, что и в С# + типы С
  • 0

#515
.ctor

.ctor
  • Свой человек
  • 988 сообщений
по началу путаешься между ними, потом привыкаешь когда путаешься и уже не злишься :D
  • 0

#516
topcraze

topcraze
  • В доску свой
  • 2 009 сообщений

Все те же типы, что и в С# + типы С

да нее..

в шарпе String - он и есть String

в С - char, он и есть char

а тут! в общем, ну его, этот ваш CLI :D


  • 0

#517
5ardar

5ardar
  • Постоялец
  • 458 сообщений

Добрый день! В первый раз на данном ресурсе, поэтому прошу сильно не судить если вопрос не корректен или задан не в нужной теме. 

Установил на сайт 3 счетчика от mail.ru, yandex.ru, zero.kz. Первый вроде работает, а вот с двумя остальными возникли проблемы. Второй, yandex, вроде считает и выдает статистику на своем сайте, но вот на моем он не отображаеться. С Zero обратная ситуация, на моем сайте отображаеться, но не считает. Решил обратиться в саппорт, но ни у одних ниу  других не получил ответа. Счетчик яндекса выдает ошибку "Failed to load resource: the server responded with a status of 403 (Forbidden)". Ествественно вбивал эту ошибку в гугл, но нужного ответат не получил. Возможно кто-то сталкивался  с этим и может помочь. ссылка на сайт http://www.ivan-company.kz/, счетчики стандартно установленны на футер страницы.


  • 0

#518
Celesta*

Celesta*
  • Частый гость
  • 58 сообщений

Подскажите пожалуйста,

у меня на работе на компьютере мышка само по себе открывает папки, файлы. 

Как прекратить доступ злоумышленникам? 


  • 0

#519
.ctor

.ctor
  • Свой человек
  • 988 сообщений

Подскажите пожалуйста,
у меня на работе на компьютере мышка само по себе открывает папки, файлы. 
Как прекратить доступ злоумышленникам?


hq-wallpapers_ru_animals_57086_1920x1200
Есть более гуманные способы для борьбы с грызунами.
Можно кошку на работе завести, но тогда ее придется кормить и убирать за ней последствия.. Кот - хуже кошки. Помимо того что он будет орать по весне как дурак, так еще может тапки обрызгать или углы (если вы в офисе не пользуетесь сменной обувью). Вообще странная у вас мышь, они обычно провода грызут или мебель..
  • 2

#520
Celesta*

Celesta*
  • Частый гость
  • 58 сообщений

Надеюсь это был сарказм


  • 0


Количество пользователей, читающих эту тему: 1

пользователей: 0, неизвестных прохожих: 1, скрытых пользователей: 0

Размещение рекламы на сайте     Предложения о сотрудничестве     Служба поддержки пользователей

© 2011-2022 vse.kz. При любом использовании материалов Форума ссылка на vse.kz обязательна.