Go Back   В UNIX и Linux Форумы > Топ форумы > UNIX перспективных И опытных пользователей
.
Google Site



UNIX перспективных И опытных пользователей Эксперт-на-экспертов. Узнайте современные UNIX, UNIX команды, Linux, операционные системы, системы управления, программирование, Shell, Shell скриптов, Solaris, Linux, HP-UX, AIX, OS X, BSD.

Closed Thread
English Japanese Spanish French German Portuguese Italian Powered By Powered by Google
 
Резьба Инструменты Искать в этом Thread Оценить Thread Режимы дисплея
Old 10-28-2008
Зарегистрированный пользователь
 

Регистрация: август 2008
Сообщений: 16
Конвертировать UTF-8 кодировке шестнадцатиричное значение символа

Привет,
Я, не-ASCII символами (W), которая может быть представлена в UTF-8 кодировке в качестве эквивалента шестнадцатиричное значение (\ xC5B4). Есть ли функция в Unix преобразовать эту шестнадцатиричное значение на дисплее в charcter?
Рекламные ссылки
Old 10-28-2008
fpmurphy's Avatar
Модератор
 

Регистрация: Декабрь 2003
Откуда: Florida
Сообщения: 2101
Если Ваша локаль правильно настроен любое количество утилит может показывать этот символ правильно. Например, если ваш корпус ksh93 версия сек или лучше, printf "\ xC5B4" будет выводить ожидается характер.
Old 10-28-2008
Зарегистрированный пользователь
 

Регистрация: август 2008
Сообщений: 16
Fpmurphy Привет, спасибо за ответ.
У PLS можете указать, каким образом и какой локали это установить? Я работающий на ОС Solaris 5,8.

Кроме того, это является частью более крупных проблем. На самом деле я препровождающая выше характера с помощью электронной почты. поэтому я извлечь из этого сообщения на почтовый сервер на Unix, и расшифровать его. Что происходит здесь заключается в том, что символ декодирован как (A '), который фактически 0xC5B4 annoted в ASCII (0xC5 \u003d A, 0xB4 \u003d').

Поэтому я хочу воспользоваться этим (A) и перейти к (W), непосредственно или через своих шестнадцатиричное значение (\ xC5B4).
Old 10-28-2008
Советник
 

Регистрация: Sep 2002
Место проведения: Гонконг, Китай
Сообщений: 1623
Это означает, что процесс декодирования обрабатывает сообщения, как ISO-8859-1 (или ASCII), а не UTF-8. Существует нет "конверсия" происходит здесь. Это просто процесс декодирования Сбой основаны на неправильном предположении кодирования.

Вы пробовали провести расследование, если что-либо неверно, что приводит к сообщение не следует толковать как UTF-8? Например, вы проверьте кодировку в заголовке, было ошибочно указан как ничего кроме UTF-8? И вы можете попробовать с другими почты с UTF-8 и убедиться, что это вопрос, с особым почте (иногда неправильно почты пользователя агентом является виновником) или больше вопрос. Попробуйте переключения почтовых клиентов и посмотреть, если вы всегда можете воспроизводить это.
Old 10-28-2008
Зарегистрированный пользователь
 

Регистрация: август 2008
Сообщений: 16
Привет там,
Я на самом деле с помощью Perl для получения сообщений из почтового ящика. определенный артикль Perl Модуль для кодирования / декодирования (MIME-Base64-3.07> MIME:: Base64) является одним, который будет использоваться, но при декодировании он декодирует в ascii/iso-8859-1 (хотя заголовка правильно показана кодировка UTF-а 8).

В этом случае, если я хочу преобразовывать эти данные в UTF-8 обратно (как это описано выше), то есть команда / способ сделать это в Unix?
Old 10-28-2008
Советник
 

Регистрация: Sep 2002
Место проведения: Гонконг, Китай
Сообщений: 1623
Я не очень уверен MIME:: Base64, как я не использовал его раньше. Тем не менее, сама base64 кодирование-агностиком, то есть, он кодирует / декодирует без связи в любой кодировке исходное сообщение, потому что он не только используется для кодирования текстовых данных, но и изображения, ZIP-файлы или просто о каких-либо бинарных данных можете себе представить, что не имеют понятия о "кодировке" на всех. Так что Base64 видит и действует на это просто bytestream. он не очень то, что уход внутрь.

Так, для текстового сообщения:


Код:
            encoding      Base64 Encoding
Text content ---> bytestream ---> Base64-encoded message

               Base64 decoding      Decoding
Base64-encoded message ---> bytestream ---> Text content

Иными словами, вы должны вручную обрабатывать декодирования иметь Perl расшифровывать его как UTF-8 правильно. По умолчанию Perl обрабатывает все как ASCII, так что может объяснить, почему вы получите выход неправильно.

Perl имеет специфические quirks в связи с Unicode. Это очень многое зависит от версии Perl Вы используете. Я имел достаточно тщательного расследования Perl Поддержка Unicode в 5,8 отрасли, но не уверены в том случае, если какие-либо изменения были осуществлены в 5.10. Если у вас есть Perl 5.6 или выше, шансы на Perl Unicode поддержка не является достаточной для обеспечения безопасности Unicode.

Я не могу объяснить столько с так мало места здесь. Я рекомендую вам начать с perluniintro manpage для получения дополнительной информации:

perluniintro - perldoc.perl.org

Вам будет необходимо предоставить дополнительную информацию в том, что происходит в Perl стороны, если вы хотели бы заниматься этим в более конструктивном ключе.

Последний раз редактировалось cbkihong; на 10-28-2008 10:48 PM.. Причина: опечатка
Old 10-28-2008
Советник
 

Регистрация: Sep 2002
Место проведения: Гонконг, Китай
Сообщений: 1623
Хорошо, если вы чувствуете, что озадачен manpage (Вы, вероятно, будет!), Позвольте мне привести вам целый ряд примеров, чтобы дать вам общее представление о некоторых из наиболее важных вещей, вы должны знать.

Как я китайская, я буду использовать китайский в примерах. Все коды в UTF-8.

Ожидаемые среды: а UTF-8 терминала при надлежащем оказать шрифты Unicode текст.

Тест 1 - Давайте начнем с этого

Код:
my $str = "你好吗?";

print("$str\n");
printf("Length: %d\n", length($str));

你好吗?
Длина: 12

Это состоит из 4 китайских иероглифов, 3 байта каждый UTF-8. Так, потому что Perl не рассматривать его как UTF-8, а ASCII, длина возвращается 12. Терминал-прежнему делает струны правильно, потому что байтах возвращаются стенографическими на терминал и терминал пытается декодировать bytestream как UTF-8, я помню себя терминал правильно настроена на UTF-8 (но не Perl в данном случае)?

Тест 2 - признать, UTF-8 символов, встроенные в исходном коде

Код:
use utf8;

my $str = "你好吗?";

print("$str\n");
printf("Length: %d\n", length($str));

Широкий характер в печатном виде на test.pl линии 6.
你好吗?
Длина: 4

Perl Сейчас признается, струны в 4-символа UTF-8 строку, но предупреждение выдается Perl, Потому что выходной поток (STDOUT) не настроен принимать UTF-8 декодирован строк.

Тест 3 - Поворот на UTF-8 на стандартном режиме потоки

Код:
use utf8;
binmode(*STDOUT, ":utf8");

my $str = "你好吗?";

print("$str\n");
printf("Length: %d\n", length($str));

Теперь предупреждение исчезнет. С точки зрения Perl, UTF-8 теперь корректно обрабатываются.

Но как насчет струн возникла в другом месте (как в вашем случае), а не встроенных в исходном коде? Нам понадобится еще один способ.

Тест 4 - Использование ручного декодирования

Код:
use Encode;
binmode(*STDOUT, ":utf8");

my $str = "你好吗?";
$str = decode('utf8', $str);

print("$str\n");
printf("Length: %d\n", length($str));

Тот же результат, как тест 3, однако декодирование руководства. Исходный код является ASCII-кодировке, и, следовательно, строка буквально Embedded, но руководство декодирования позволяет декодирование строки буквально на одном из Perl UTF-8 строки, так что длина () корректно сообщает длину потом.

Эти примеры покрытия может составлять 80% от того, что вам нужно знать, чтобы Perl Процесс Unicode правильно в большинстве случаев. Что касается отдыха, то вам нужно проконсультироваться с manpage.
Рекламные ссылки
Closed Thread

Закладки

Теги
Perl, юникод

Резьба Инструменты Искать в этом Thread
Искать в этом Thread:

Расширенный поиск
Режимы дисплея Оценить эту ветку
Оценить эту ветку:

Отправка Правила
Вы не может Начать новую нитей
Вы не может Почтовые ответы
Вы не может Почтовые вложения
Вы не может Редактировать Ваши сообщения

BB код быть На
Смайлики являемся На
[IMG] код На
HTML-код Вне
Trackbacks являемся На
Pingbacks являемся На
Refbacks являемся Вне


Подробнее UNIX и Linux Темы форума можно найти полезные
Нить Резьба для начинающих Форум Ответы Последнее сообщение
почему конвертировать 8 космических 1 табуляции на Unix? Tlg13team Shell программирование и сценарии 6 08-20-2008 12:06 AM
Преобразование символов в слове на СЗГА?? vadharah Shell программирование и сценарии 3 04-01-2008 08:44 AM
SED заменить строку с кодировкой mg1 UNIX для чайников Вопросы И Ответы 5 01-10-2008 12:31 PM
преобразование специальных символов, как £ cynnie Shell программирование и сценарии 1 08-08-2007 07:37 AM
UTF-8 кодировка строки и AWK Алина Shell программирование и сценарии 2 07-16-2007 10:22 PM



Часовой пояс GMT -4. Текущее время 01:26 AM.


Powered By: Справка, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Язык Переводы на питание от .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
UNIX и Linux Форум Авторские права © 1993-2010 годов. Все права Reserved.Ad управление RedTyger

Содержание соответствующие URL-адреса в vBSEO 3.2.0