Бинарник и Utf-8

Тема в разделе "Lotus - Программирование", создана пользователем ToxaRat, 3 июн 2010.

  1. ToxaRat

    ToxaRat Чёрный маг
    Lotus team

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.046
    Симпатии:
    18
    Собственно имеем ситуацию, берем и открываем файл через нотесстрим как бинарный и работаем с ним.
    Всё бы хорошо но там содержится уникод - русские и украинские буквы
    Это приводит к тому, что нужно прочитать ДВА байта а не один, и собрать в стринг из них ОДНУ букву
    Тоесть к примеру, глядя бинарник мы видим: D0 9F - это соответствует русской букве "П", уникод этой буквы 1055
    Сразу выбил формулу, что если взять два байта то стринг мы получим
    s1 = Uchr$(b1*256+b2-52352)
    тоесть D0 9F я преобразовал в букву "П"
    так вот мне интересно откуда взялась эта цифра 52352??
    Подозреваю, что она сильно зависит от первого байта
    Есть где нибудь правила уникода? :)
     
  2. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    Вообще-то, сама кириллица это не юникод еще.

    Уникод буквы "П" (1055) = H041F, Это UTF-16.
    А откуда твоя формула? Просто придумал? :)

    Твой файл, из твоего описания, записан в UTF-8.
    Преобразование из Unicode to UTF-8.
    Символы Unicoda в диапазоне 0x00000080 — 0x000007FF записываются в виде двух байт 110xxxxx 10xxxxxx
    Т.е. 11 бит размещаются в двух байтах так: 5 бит в старшем байте, 6 - в младшем.
    "П" = UTF-8 Hex D09F = UTF-8 Bin 1101 0000 1001 1111 -> Unicode Bin 0000 0100 0001 1111 = Unicode Hex 041F

    Откуда цифра 52352? :) Из твоей формулы - ты ее обратным вычислением получил.
    Вот тут посмотри про формирование UTF-8 http://ru.wikipedia.org/wiki/UTF-8
     
  3. VladSh

    VladSh начинающий
    Lotus team

    Регистрация:
    11 дек 2009
    Сообщения:
    1.251
    Симпатии:
    2
    Может быть это BOM?
    Что-то есть здесь: http://ru.wikipedia.org/wiki/BOM
     
  4. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    Нет, BOM - это в начале файла идет, как ключ к кодировке

    Наглядный пример кодировок unicode:

    [​IMG]
     
  5. ToxaRat

    ToxaRat Чёрный маг
    Lotus team

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.046
    Симпатии:
    18
    Akupaka
    благодарствую, это именно то что нужно! :)
    а цифру я да, от обратного получил, но при пересечении русско/украинского она становилась не верной
     
Загрузка...
Похожие Темы - Бинарник Utf
  1. Kizarek86
    Ответов:
    17
    Просмотров:
    5.538
  2. Kizarek86
    Ответов:
    4
    Просмотров:
    2.459
  3. mazimaz
    Ответов:
    29
    Просмотров:
    1.271
  4. Vadik(R)
    Ответов:
    4
    Просмотров:
    1.426
  5. garrick
    Ответов:
    2
    Просмотров:
    1.420

Поделиться этой страницей