Russian Qt Forum

Qt => Интернационализация, локализация => Тема начата: zosia от Март 05, 2009, 16:45



Название: Кодировка текста, русский язык
Отправлено: zosia от Март 05, 2009, 16:45
Здравствуйте,

вот пытаюсь разобраться, как отправить текст (POST) в кодировке windows-1251.
с латиницей - всё ok. а вот кирилицу - скрипт не видит.

пробую так:

Код
C++ (Qt)
QTextCodec *xcodec = QTextCodec::codecForName("Windows-1251");
QString text = xcodec->fromUnicode(ui->textLineEdit->text());
QUrl param( text );
QString url = QString("/my_script.php?mytext=" + param.toEncoded());
 

что я не правильно делаю?


Название: Re: Кодировка текста, русский язык
Отправлено: BRE от Март 05, 2009, 16:48
вот пытаюсь разобраться, как отправить текст (POST) в кодировке windows-1251.
с латиницей - всё ok. а вот кирилицу - скрипт не видит.
А по стандарту вроде кирилицу нельзя. Может я и заблуждаюсь.


Название: Re: Кодировка текста, русский язык
Отправлено: Rcus от Март 05, 2009, 16:49
Цитировать
QByteArray QTextCodec::fromUnicode ( const QString & str ) const
Цитировать
QString::QString ( const QByteArray & ba )
Constructs a string initialized with the byte array ba. The given byte array is converted to Unicode using fromAscii(). Stops copying at the first 0 character, otherwise copies the entire byte array.
You can disable this constructor by defining QT_NO_CAST_FROM_ASCII when you compile your applications. This can be useful if you want to ensure that all user-visible strings go through QObject::tr(), for example.
Рекомендую последовать совету доков.


Название: Re: Кодировка текста, русский язык
Отправлено: zosia от Март 05, 2009, 17:07
в main.cpp пишу:

#define QT_NO_CAST_FROM_ASCII
(#define QT_NO_CAST_FROM_BYTEARRAY)

всё равно нечего(

Код
C++ (Qt)
QTextCodec *xcodec = QTextCodec::codecForName("windows-1251");
 
Код
C++ (Qt)
QByteArray text = xcodec->fromUnicode(ui->textLineEdit->text());
 
или
Код
C++ (Qt)
QString text = xcodec->fromUnicode(ui->textLineEdit->text());
 
или просто
Код
C++ (Qt)
QString mytext = ui->textLineEdit->text();
QString text = mytext.toUtf8();
 

или я вообще не понимаю?


Название: Re: Кодировка текста, русский язык
Отправлено: BRE от Март 05, 2009, 17:17
А уточни, что значит "скрипт не видит". Что если смешать в одной строке литиницу и кирилицу?


Название: Re: Кодировка текста, русский язык
Отправлено: Rcus от Март 05, 2009, 17:23
в main.cpp пишу:

#define QT_NO_CAST_FROM_ASCII
(#define QT_NO_CAST_FROM_BYTEARRAY)

всё равно нечего(

Такие вещи пишут в файле проекта или в опциях сборки, ну в крайнем случае до инклудов. Тогда ощутите разницу между QByteArray и QString :)


Название: Re: Кодировка текста, русский язык
Отправлено: zosia от Март 05, 2009, 17:40
А уточни, что значит "скрипт не видит". Что если смешать в одной строке литиницу и кирилицу?

в скрипте идёт проверка, напр. просто протестировать:
Код
PHP
<?
if(isset($_POST['mytext']) && $_POST['mytext']=="hello") {
echo "good";
}elseif(isset($_POST['mytext']) && $_POST['mytext']=="russky_tekst") {
echo "good too";
}else{
echo "bad";
}
?>
 

если с любого другого скрипта или с него же проверить - всё ok и кирилица и латиница...


Название: Re: Кодировка текста, русский язык
Отправлено: zosia от Март 05, 2009, 17:43

Такие вещи пишут в файле проекта или в опциях сборки, ну в крайнем случае до инклудов. Тогда ощутите разницу между QByteArray и QString :)

Как записать это в файле проекта? ...или в опциях сборки, я просто полный 0 в этом( не могли бы Вы подсказать?


Название: Re: Кодировка текста, русский язык
Отправлено: BRE от Март 05, 2009, 17:44
А выведи что находится в $_POST['mytext']


Название: Re: Кодировка текста, русский язык
Отправлено: zosia от Март 05, 2009, 17:50
А выведи что находится в $_POST['mytext']
напр. русское слово "привет":
привет

UTF-8 по видимому...


Название: Re: Кодировка текста, русский язык
Отправлено: zosia от Март 05, 2009, 17:54
я полный лох.
внимания никакого.

было:

Код
C++ (Qt)
  QByteArray ba("mytext=");
   ba.append( text.toUtf8() );
   http->request(header,ba);
 

а надо было:

Код
C++ (Qt)
  QByteArray ba("mytext=");
   ba.append(text);
   http->request(header,ba);
 


 :-[

спасибо за помощь!