Несколько дней назад PEK спросил в newsgroups насчёт
WideCharToMultiByte
и MultiByteToWideChar
:
Я несколько смущён первым параметром вОтвет: они действительно действуют одинаково. Первый способ - это константа, которая говорит: "меня не волнует, какая сейчас у системы кодовая страница - просто используй её". А второй способ сначала спрашивает "какая у системы кодовая страница по умолчанию?".MultiBytToWideChar
. Он говорит какую использовать кодовую страницу. Вы можете использовать значениеCP_ACP
("кодовая страница ANSI"), но что оно означает? Это значение, возвращаемоеGetACP
или это просто кодовая страница 1252?
Я хочу знать, одинаковые ли результаты дают вызовы:
MultiByteToWideChar(CP_ACP, ...)и:MultiByteToWideChar(GetACP, ...)
Естественный вопрос: почему есть два способа добиться одного и того же. И какой из них будет быстрее - кэширование
GetACP
, либо передача CP_ACP
?Ну, на NT платформах
CP_ACP
немного быстрее. И под "немного" я имею ввиду, что на 1'000'000 итераций вы заметите лишь незначительную разницу. На платформах 9x непосредственное значение кодовой странице может быть даже чуть более быстрым, но не настолько, чтобы это имело значение. Я предпочитаю способ с CP_ACP
, потому что он кажется мне проще в отслеживании. Для вас это может и не иметь значения.P.S. OK, мне выпал шанс заглянуть в исходный код Win9x, и я изменил своё мнение. Я могу явно увидеть разницу;
CP_ACP
будет медленее. Не намного, но это не самый лучший кусок кода, что я видел. Я также понимаю, почему этот код не используется в коде NT. Кстати, MSLU была написана с использованием метода с кэшированием кодовой страницы, основываясь на чьём-то комментарии о том, что этот способ немного быстрее на Win9x. Ну, комментарий был прав и я рад, что MSLU так делает.Итак, а если вы используете .NET Framework, то у вас, вероятно, возник вопрос - что быстрее: использование
Encoding.Default
, или использование метода Encoding.GetEncoding
для создания отдельного объекта Encoding. И быстрый ответ заключается в использовании Encoding.Default
- поскольку это всегда быстрее.Но лучший ответ - это тот, который даёт Shawn Steele (владелец кодировок и кодовых страниц): используйте Unicode и вы избежите всей этой дополнительной работы. Это намного проще, особенно если учесть что все данные и так уже в Unicode...
This post brought to you by "﹌" (U+fe4c , a.k.a. DOUBLE WAVY OVERLINE)
Комментариев нет:
Отправить комментарий
Можно использовать некоторые HTML-теги, например:
<b>Жирный</b>
<i>Курсив</i>
<a href="http://www.example.com/">Ссылка</a>
Вам необязательно регистрироваться для комментирования - для этого просто выберите из списка "Анонимный" (для анонимного комментария) или "Имя/URL" (для указания вашего имени и ссылки на сайт). Все прочие варианты потребуют от вас входа в вашу учётку.
Пожалуйста, по возможности используйте "Имя/URL" вместо "Анонимный". URL можно просто не указывать.
Ваше сообщение может быть помечено как спам спам-фильтром - не волнуйтесь, оно появится после проверки администратором.
Примечание. Отправлять комментарии могут только участники этого блога.