Данная страница - это Глава 2 раздела "Unicode и кириллица: проблемы и решения" моего сайта.
Unicode и кириллица: Copy/Paste и другие проблемы
Проблема: Нечитабельный текст ('кракозябры') или
вопросительные знаки (????) вместо кириллицы
во время работы с Word 97 и новее или другими Unicode-программами
(MS Internet Explorer, Outlook Express, MS Outlook, Netscape 7/Mozilla,...):
Примечание.
Эти проблемы обычно отсутствуют под 'русской' Windows.
Когда я ниже пишу "русская Windows", это не означает только локализованную
версию, где вместо "Start" на кнопке - "Пуск". Нет, это любая,
пусть даже и с английским интерфейсом Windows, где кириллица является
системной кодовой страницей, то есть system code page = "Cyrillic, 1251".
(system code page обсуждается в деталях на моей странице
"Полная русификация, на системном уровне")
Поэтому ниже, чтобы не писать длинногo "...система, где system code page = 1251...",
я использую для таких систем название "русская Windows".
Причиной вышеописаных проблем является то, что эти новые Unicode-программы сильно
отличаются в плане языковой поддержки от 'старых' программ, которые 'знают'
только 'старые' (legacy) кодировки, такие как
"Western European, Code Page 1252" или "Cyrillic, Code Page 1251".
Примеры неюникодовых приложений:
- Окно ввода текста в Netscape вер. 3 и 4, например, окно, где готовится
e-mail (Composition window)
- UltraEdit - простой текстовый редактор
(shareware), который я использую каждый день. Там достаточно выбрать
шрифт (View/SetFont) типа "Courier New", Script="Cyrillic"
чтобы по-русски писать.
Обычно текстовые редакторы это неюникодовые программы.
- Macromedia Dreamweaver - окно ввода текста
(сам не видел этой программы, но читал, что это - неюникодовая программа)
Ниже приведены способы решения указанных в начале страницы проблем
Примечание.
Предполагается, что кириллические шрифты и русская клавиатура уже активны, установлены.
Если же нет, то надо это сделать до того, как читать дальше.
Соответствующие инструкции - в разделе "Введение. Кириллица под Windows" на заглавной странице
моего сайта.
Оглавление
- Копирование (Copy/Paste) текста между Unicode and не-Unicode программами:
- Unicode-программа ---> не-Unicode программа
Копирование русского текста из Unicode-программы
(Word 97 и новее, Internet Explorer, Outlook Express,
MS Outlook, Netscape 7/Mozilla)
в не-Unicode программу (Netscape 4.79, UltraEdit, Dreamweaver) -
получаем вопросительные знаки (???) вместо русского
в окошке такой неюникодовой программы
- не-Unicode программа ---> Unicode-программа
Копирование русского текста из неюникодовой программы
(Netscape 4.79, UltraEdit, Dreamweaver)
в Unicode-программу (Word 97 и новее, Internet Explorer,
Outlook Express, MS Outlook, Netscape 7/Mozilla,...) -
получаем нечитабельный текст ('кракозябры')
вместо русского в окошке такой Unicode-программы
- Проблема MS Word 97 (и новее) и кириллических .TXT файлов -
- загрузка такого файла в Word: получаем нечитабельный текст ('кракозябры')
- сохранение документа из Word в простой текстовый файл (.TXT):
получаем вопросительные знаки (???) вместо русского
Копирование (Copy/Paste):
Unicode-программа ---> не-Unicode программа
Вопросительные знаки ("???") при попытке скопировать русский текст
из юникодовой программы (Word 97+, Internet Explorer, Outlook Express,
MS Outlook, Netscape 7/Mozilla,...)
в неюникодовую (Netscape 4.79, UltraEdit, Dreamweaver,...).
Обычно это происходит под нерусской версией Windows
(то есть, где System Code Page - не 1251).
Перекодировка из Unicode в неюникодовый текст базируется на системной кодовой странице
(system code page) поэтому под Windows, где system code page -
"Western" происходит следующее:
- Набор символов (Character Set) "Unicode" содержит кириллицу, а вот
в "Western European" кириллицы нет совсем
(там в верхней части таблицы - западно-европейские буквы с диакритикой).
- Поэтому при попытке найти соответствие русской букве из набора символов Unicode
в наборе символов "Western", процедура перекодировки в результате вписывает вопросительный
знак ('?'), что означает:
"Не найдено соответствие в том наборе символов, в который идет перекодировка"
("symbol not found in target encoding")
Именно поэтому каждая русская буква в результате такой перекодировки
заменяется на вопроситвльный знак, причём это обычный '?', ничего специального
в нём нет :-) (многие спрашивают в конференциях, а как из этого
вопросительного знака русскую букву получить. Никак, это обычный символ '?'
и ничего более)
Решение проблемы: надо, в качестве 'промежуточного пункта',
использовать окно программы, которая, во-первых, понимает Unicode, и, во-вторых,
позволяет указать кодировку, то есть, указать, что идёт копирование именно кириллического текста.
Предлагаю на выбор 2 бесплатные программы такого типа (щёлкните на нужное, чтобы
прочесть соответствующую инструкцию):
Netscape 4 может помочь при копировании из юникодовой программы (например, Internet Explorer или
Word 97/2000)
в не-юникодовую (например, текстовый редактор или Dreamweaver):
Netscape Communicator 4.х имеет встроенный HTML редактор - Composer,
который как раз годится для наших целей - он понимает Unicode, и
дает возможность явно указать, что идёт работа с кириллицей:
- Вызвать Netscape
- открыть окно Composer через меню - Communicator/Composer
- Переключиться на кодировку Cyrillic(Windows):
- в Netscape 4.x: View/CharacterSet/Cyrillic(Windows-1251)
- в Netscape 4.0x: View/Encoding/Cyrillic(Windows-1251)
Теперь можно использовать это окно как 'промежуточный пункт' при копировании:
- Скопировать нужный текст из юникодовой программы в окно
Netscape Composer
(где текущая кодировка - Cyrillic(Windows)!)
- Выделить весь скопированный текст в этом окне (например, через Ctrl/A)
и теперь уже скопировать отсюда, из Netscape Composer, в нужную
не-юникодовую программу - копирование пройдёт нормально,
кириллица не заменится на знаки вопроса, т.к. системе исвестно, что
текст - в кодировке Cyrillic(Windows), а не в той, что
является системной кодовой страницей ("Western").
К Оглавлению
UniPad
(специальный редактор для Unicode) может помочь при копировании из юникодовой
программы (например, Internet Explorer или Word 97/2000)
в не-юникодовую (например, текстовый редактор или Dreamweaver):
- Сгрузить и установить UniPad"
- Вызвать UniPad и открыть новый документ - File/New
Теперь можно использовать это окно, как 'промежуточный пункт' при копировании:
- Скопировать нужный текст из юникодовой программы в это окно UniPad.
UniPad понимает Unicode, поэтому Вы увидите нормальную кириллицу.
- Выделить весь скопированный текст в этом окне (например, через Ctrl/A)
- В меню найти пункт Edit / Copy As
('скопировать с указанием кодировки')
В списке кодировок найдите нужное - "Windows CP-1251 (Cyrillic)"
и щёлкните на "Ok".
Произойдёт перекодировка из юникодового текста в не-юникодовый -
по схеме Unicode ---> "Cyrillic (Windows)", которую мы явно указали
(а иначе бы перекодировалось в "Western" и кириллица при этом пропала, на знаки
вопроса заменилась бы)
- Tеперь можно вставить этот текст в нужную программу (сделать Paste),
кириллица не заменится на знаки вопроса, т.к. системе исвестно, что
текст - в кодировке Cyrillic(Windows), а не в той, что
является системной кодовой страницей ("Western").
К Оглавлению
Копирование (Copy/Paste):
не-Unicode программа ---> Unicode программа
Нечитабельный текст ('кракозябры') при копировании кириллицы из не-юникодоовй программы
(например, Netscape 4.79 или UltraEdit или Macromedia Dreamweaver)
в юникодовую (например, Word 97/2000,
Internet Explorer, Outlook Express, MS Outlook 2000, Netscape 7/Mozilla).
Обычно это происходит под нерусской версией Windows, то есть, где
кириллица не является системной кодовой страницей (system code page).
Unicode-программа 'не знает', что идёт обработка именно русского текста (кириллицы)
и поэтому использует system code page при перекодировке не-юникодового
текста в юникодовый.
Например, под английской версией Windows (system code page - "Western European", 1252)
система смотрит на исходный текст, как будто это Западно-Европейский текст,
а не кириллица, и переводит его в Unicode по схеме
"Western European, CP-1252" ---> Unicode
При этом, естественно, с кириллицей происходят нехорошие вещи :)
Например:
В исходном не-юникодовом тексте была русская буква 'д'. Её код в кодировке
"Windows(Cyrillic), CP-1251" - 228.
Но ведь юникодовая программа считает, что исходный текст не в кириллической
кодировке, а в "Western, CP-1252"! А в этой кодировке значение 228 -
это немецкая буква a-umlaut ('a' с двумя точками над ней).
Поэтому происходит вот такая перекодировка:
не-Unicode a-umlaut ---> Unicode a-umlaut
и именно эту немецкую букву Вы видите - в качестве 'кракозябр' :-) -
вместо русской 'д' после копирования в юникодовую программу.
Есть 2 возможных решения этой проблемы. В некоторых случаях срабатывает очень
простой Способ no. 1, если же не сработает,
тогда придётся использовать универсальный Способ no. 2.
Примечание. Word 2000/XP имеет своё, особое решение этой проблемы -
см. ниже раздел "Специальный MS шаблон Eefonts для Word 2000/XP".
Способ 1
Используйте следующий приём при копировании русского текста
из неюникодовой программы (Netscape 4.79, UltraEdit, Dreamweaver, ...)
в Windows Clipboard:
Но этот способ не всегда срабатывает (не для каждой неюникодовой программы).
В таком случае:
Специальный MS шаблон Eefonts для Word 2000/XP
Микрософт предлагает бесплатный шаблон для решения проблемы 'кракозябров' при копировании
кириллицы из неюникодовой программы в Word 2000/XP.
Этот же шаблон помогает 'лечить' кракозябры, получающиеся при загрузке в Word 2000/XP
старого .doc, сделанного в неюникодовом Word 6.
В русской версии Word 2000/XP этот шаблон уже присутствует - в меню
есть пункт
Сервис / Восстановить поврежденный текст,
а для английской версии:
Итак, когда Вы скопируете русский текст из неюникодовой программы в окно
Word 2000/XP и увидите кракозябры, то:
- Выделите скопированный текст
- Tools / Fix Broken Text
(или, для русской версии -
Сервис / Восстановить поврежденный текст)
- В предложенном списке выберите "Русский" (или что надо)
Появится нормальная кириллица!
К Оглавлению
Способ 2
для копирования не-Unicode --> Unicode
Универсальное решение для такого случая - при копировании кириллицы из неюникодовой программы
(Netscape 4.79, Dreamweaver, текстовый редактор, ...) в юникодовую
(Internet Explorer, Outlook, ...) заключается в следующем:
Надо в качестве 'промежуточного пункта',
использовать окно программы, которая, во-первых, понимает Unicode, и, во-вторых,
позволяет указать кодировку, то есть, указать, что идёт копирование именно кириллического текста.
UniPad
(специальный редактор для Unicode) может помочь при копировании из неюникодовой
программы (например, текстовый редактор или Dreamweaver)
в юникодовую (например, Internet Explorer или Word 97/2000):
- Сгрузить и установить UniPad"
- Вызвать UniPad и открыть новый документ - File/New
Теперь можно использовать это окно, как 'промежуточный пункт' при копировании:
- Выделить и скопировать текст в неюникодовой программе
- Вставить текст в это окно UniPad специальным образом:
Edit / Paste As
(вставить с указанием кодировки')
В списке кодировок найдите нужное - "Windows CP-1251 (Cyrillic)"
и щёлкните на "Ok".
Произойдёт перекодировка из неюникодового текста в юникодовый -
по схеме "Cyrillic (Windows-1251)" ---> Unicode, которую мы явно указали
(а иначе бы система считала, что исходный текст -
в кодировке "Western")
- В окне UniPad теперь - нормальная кириллица (в виде Unicode)
и теперь можно отсюда скопировать в любую Unicode-программу, например,
в Word 2000
К Оглавлению
Кириллица в MS Word 97 и более поздних версиях:
работа с простыми текстовыми (.TXT) файлами
- Попытка загрузить такой файл в Word: кракозябры вместо криллицы на экране
- Сохранить Word'овский документ как "Text Only (*.TXT)": только 'вопросики' вместо русского в файле на диске.
Эти 2 проблемы бывают под нерусскими Windows, то есть, где
кириллица (CP-1251) не является системной кодовой страницей (system code page).
Простой текстовый файл .TXT (plain text file) содержит не-Unicode текст,
поэтому когда юникодовая программа Word 97/2000
работает с таким файлом, то ей приходится делать перекодировку из Unicode
(при Save As) и в Unicode (при File/Open).
Эта перекодировка делается 'по умолчанию' на основе системной кодовой страницы, поэтому под
нерусской Windows, где системная кодовая страница -
"Western, 1252", Word пытается - для текста
в кодировке "Cyrillic(Windows-1251)"! - перекодировать по схеме
"Western European, Windows-1252" <-----> Unicode
и именно поэтому люди имеют те самые 2 проблемы, указанные выше.
Решение: Дать понять системе, что этот простой не-Unicode текст -
именно в кодировке "Cyrillic(Windows-1251)", а не той, которая соответствует
системной кодовой странице.
MS Word 2000 и более поздние версии имеют встроенные опции для этого,
а для Word 97 надо использовать вспомогательную программу как промежуточный шаг.
Подробное описание решения этих 2-х проблем с простым текстовым файлом (.TXT)
Загрузка (File/Open) кириллического .TXT в MS Word 97+
Допистим, у Вас есть простой текстовый файл A.TXT с кириллицей в кодировке 1251
(называемой часто "Cyrillic(Windows)" или "Windows-1251").
Word вер. 2000 и выше даёт вам возможность указать, что это именно 1251 файл,
а вот Word 97 требует более сложного решения.
MS Word 2000 и более поздние версии
MS Word 97
Есть несколько методов решения проблемы загрузки русского .TXT в Word 97
на нерусской машине путём использования вспомогательной программы, как промежуточного
шага. давайте рассмотрим 2 из них:
Использование Netscape для загрузки русского .TXT в Word 97
В Netscape, делаем File/Open, выбираем "Text (.TXT)" в качестве "Files of Type".
Ваш русский файл A.TXT загружается в окно Netscape. Теперь надо сменить кодировку:
- в Netscape 6 - View/Character Encoding/Cyrillic(Windows-1251)
- в Netscape 4.5+ - View/Character Set/Cyrillic(Windows-1251)
- в Netscape 4.0x: View/Encoding/Cyrillic(Windows-1251)
Теперь на экране должен быть нормальный русский текст и Вы можете спокойно его скопировать
в Word 97.
Использование неюникодового текстового редактора для загрузки русского .TXT в Word 97.
Надо загрузить сначала этот Ваш A.TXT в простой не-юникодовый текстовый редактор, где русский шрифт
выбран рабочим и текст виден нормально в окне.
После этого надо скопировать текст в Word 97, используя методы Copy/Paste, описанные
выше на этой странице.
Как я это делаю (с помощью UltraEdit):
- В меню UltraEdit menu иду в View / Set Font и там:
- выбираю шрифт "Courier New".
- в поле Script справа внизу выбираю "Cyrillic"
- File / Open - указываю на A.TXT, он загружается, я вижу нормальный русский.
- Теперь, чтобы скопировать этот текст в из неюникодового редактора UltraEdit в
юникодовый Word 97, я использую описанный выше на этой странице
Метод для Copy/Paste не-Unicode--->Unicode
Назад к началу раздела Две проблемы с русскими .TXT файлами
К Оглавлению
Сохранение (File/SaveAs) русского документа из Word 97+ как "Text Only (.TXT)"
Допустим у Вас в окне Word 97 (или более поздней) - русский документ, и Вы хотите его сохранить
в виде простого текстового файла A.TXT.
Word 2000 (и выше) даёт вам возможность указать программе, что текст будет в кодировке
Cyrillic, а вот Word 97 требует вспомогательной программы в качестве промежуточного шага.
MS Word 2000 и более поздние версии
- File / Save As, ввести имя файла, и в поле "Save as Type" выбрать
"Encoded text (.txt)" ("Текст в некой кодировке")
(под Word 2003 - выбрать "Plain Text(*.txt)")
- Word 2000 предъявит новое окне - "File Conversion", где надо указать эту самую
кодировку:
- щёлкнуть у поля "Other Encoding"
- выбрать в списке "Cyrillic(Windows)"
- щёлкнуть на Ok
Созданный .TXT файл будет содержать нормальный Windows-1251 текст, а не 'вопросики'.
MS Word 97
Итак, в окне MS Word 97 у Вас русский документ, который Вы хотите сохранить как A.TXT.
Не получится - надо сначала скопировать текст в другой, неюникодовый текстовый редактор,
а уж из него сохранить в виде .TXT.
Если у Вас есть Ваш любимый неюникодовый редактор простых текстов (.TXT), где можно
работать с русскими .TXT файлами, то вызовите его, а если нет ещё такого редактора,
то придётся установить -
их полно, например, мой любимый UltraEdit.
Вот как я это делаю с помощью UltraEdit:
- В меню UltraEdit menu иду в View / Set Font и там:
- выбираю шрифт "Courier New".
- в поле Script справа внизу выбираю "Cyrillic"
- Чтобы скопировать русский текст из юникодового Word 97 в неюникодовый редактор UltraEdit,
я использую метод, описанный выше на этой странице:
Метод для Copy/Paste Unicode ---> не-Unicode
- Теперь, в UltraEdit, когда Вы видите нормальный русский текст,
можно его сохранить как A.TXT через File/SaveAs.
Назад к началу раздела Две проблемы с русскими .TXT файлами
К Оглавлению