Страницы

Поиск по вопросам

вторник, 24 декабря 2019 г.

Windows портит кодировку при copy&paste

#windows #администрирование #windows_10 #codepage


Есть несколько legacy-приложений без полной поддержки unicode.

Есть windows (в данном случае 10, но и на предыдущих версиях тоже проблема есть.
Как минимум в 7 и 8).

В программе выделяю слово "Привет", копирую в буфер обмена, вставляю в notepad.exe,
получаю "Ïðèâåò" (результат преобразования не из win-1251 в Unicode, а из win-1252).

Вставляю в другую не-юникодную программу и получаю "I?eaao" (результат преобразования
из unicode в win-1251, с заменой символов на похожие, т.е. уже необратимо).

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

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

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

Так вот вопрос в том, можно ли как-нибудь настроить windows, чтобы он всегда при
преобразовании unicode<->ansi всегда принудительно использовал кодировку 1251?

Если нет, можно ли настроить так, чтобы он хотя бы при copy и последующем paste использовал
одну и ту же кодировку?
    


Ответы

Ответ 1



Исправление ошибки чтения кириллицы путем подмены файлов кодировок Идем в папку: C:\Windows\System32. И ищем файл с названием c_1252.nls и нам нужно переименовывать его в c_1252.bak или перенести в какой-нибудь другой каталог. Копируем файл c_1251.nls в C:\Windows\System32. Переименовываем копию файла в c_1252.nls. Перезапускаем компьютер. После загрузки компьютера кириллическая кодировка будет без проблем отображаться.

Ответ 2



Control panel Region and language Administrative Change system locale

Ответ 3



В реестре перенастроить кодовые страницы 1250 и 1252 на 1251. Хоть это и некорректно, но на сколько я помню, других вариантов нет. Иначе да, только переключать раскладку перед копипастом(можно программку написать). P.S. С просторов интернета: Это может происходить из-за того, что приложение, из которого производится копирование, помещает текст в буфер обмена в 8-битной кодировке, а то, в которое происходит вставка, запрашивает его в Юникоде (так делает, например, Блокнот). Windows "идёт навстречу" и перекодирует текст. При копировании в буфер помещается также информация о языке. Это может делать само приложение, а если не делает, то Windows просто смотрит, на какой язык ввода было переключено приложение в момент копирования. Если на русский, то используется страница 1251 и при вставке всё нормально. Но если текст русский, а окно приложения было переключено в английский, кодирование пойдёт через 1252 страницу и вместо русских букв пойдут "кракозябры". В таких случаях может помочь предварительное переключение приложения, из которого производится копирование, на русский.

Комментариев нет:

Отправить комментарий