On-line: гостей 0. Всего: 0 [подробнее..]
АвторСообщение
постоянный участник




Пост N: 2154
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 08.04.12 15:10. Заголовок: Как проверить в какой кодировке строка ?


Подскажите пожалуйста есть ли в хХарборе функция проверки в какой кодировке строка: OEM(RU866) или WIN(RU1251) ?


Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 19 [только новые]





Не зарегистрирован
Зарегистрирован: 01.01.70
ссылка на сообщение  Отправлено: 08.04.12 16:43. Заголовок: Как проверить в какой кодировке строка ?


it's impossible, may be ?

Строка = "1234....90" в какой кодировке ?
А еще есть Unicode...

Спасибо: 0 
Цитата Ответить
постоянный участник




Пост N: 2157
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 08.04.12 19:07. Заголовок: petr707 пишет: Стро..


petr707 пишет:

 цитата:
Строка = "1234....90" в какой кодировке ?



Ну это из области фигни....

Просто при приеме данных из РКЦ Харькова БД-оплат содержит адрес и фио в кодировке, то OEM, то WIN.
Типа "¦+T+T ¦+T+L¦+T¦L -юь 29 ¦т. 49" и "T¦L++=¦+ T.=."
или "ПОСЕЛ КОВШАРОВКА Дом 29 Кв. 49" и "МУСИЯК ИГОРЬ ВЛАДИ".

Вот я хочу сделать преобразование автоматом.
Определить что за кодировка в строке, а потом преобразовать ее для своей БД.

Спасибо: 0 
ПрофильЦитата Ответить
moderator




Пост N: 366
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 08.04.12 19:12. Заголовок: Посмотри функцию Is..


Посмотри функцию IsOemText( cText ) из поставки библиотеки Минигуи

Пример использования:

 цитата:
                  if IsOemText(wfield) 
wfield:=hb_oemtoansi(wfield)
endif



Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 757
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 08.04.12 19:13. Заголовок: Андрей, нет такой фу..


Андрей, нет такой функции и быть не может.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 2159
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 08.04.12 19:57. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Посмотри функцию IsOemText( cText ) из поставки библиотеки Минигуи



Нашел твою функцию, а как её к хХарбору прикрутить ?

///////////////////////////////////////////////////////////
#pragma BEGINDUMP

#include <windows.h>
#include <hbapi.h>
#include <какие еще нужны ??? >

// Grigory Filatov <gfilatov@inbox.ru> HMG 1.1 Experimental Build 17d
HB_FUNC( ISOEMTEXT )
{
LPBYTE pString = ( LPBYTE ) hb_parc( 1 );
WORD w = 0, wLen = ( WORD ) hb_parclen( 1 );
BOOL bOem = FALSE;

while( w < wLen && !bOem )
{
bOem = pString[ w ] >= 128 && pString[ w ] <= 168;
w++;
}

hb_retl( bOem );
}

#pragma ENDDUMP


Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 2340
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 08.04.12 20:12. Заголовок: В двух кодовых табли..


В двух кодовых таблицах есть пересекающиеся диапазоны кодов, а есть такие, которые присутствуют в 866 и отсутствуют в 1251, и наоборот.
Таким образом, если код символа приходится на такой диапазон, можно считать, что строка в кодировке 866, или 1251
Диапазон кодов для 866:
128-175
Диапазон кодов для 1251:
192-223, 248-255

Общий диапазон для 2-х кодировок:
224-247


Спасибо: 1 
ПрофильЦитата Ответить
постоянный участник


Пост N: 758
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 08.04.12 21:18. Заголовок: Мда, похоже, я погор..


Мда, похоже, я погорячился...

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 6484
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 16.10.19 23:23. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Посмотри функцию IsOemText( cText ) из поставки библиотеки Минигуи



Обнаружил очередную непонятку.
МиниГуи последний.
 
// приводим всегда к WIN-кодировке
? IsOemText(cMsg), cTitle
If IsOemText(cMsg)
cMsg := HB_OemToAnsi(cMsg)
Endif
?? "change->",IsOemText(cMsg)

Результат:
.T. , "имя файла", change->	.T.

Строка остаётся в OEM кодировке....
Почему ?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 6486
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 21.10.19 15:25. Заголовок: Pasha пишет: Диапаз..


Pasha пишет:

 цитата:
Диапазон кодов для 1251:
192-223, 248-255


Есть файл в кодировке 1251.
Но когда задаёшь IsOemText(cFile), то эта функция выдаёт .T.
Что не так в файле ? Как привести файл в чётко читаемую кодировку 1251 ?

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 7121
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 21.10.19 15:37. Заголовок: Andrey пишет: Но ко..


Andrey пишет:

 цитата:
Но когда задаёшь IsOemText(cFile)


cFile это имя файла или его содержимое ?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 2953
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 21.10.19 15:42. Заголовок: Andrey Сделай prg ф..


Andrey
Сделай prg файл в RU866, например Code_RU866.prg с содержимым
 
// Этот файл в OEM кодировке RU866

FUNC nCharSet( cTxt )
LOCAL cC, nN
LOCAL nR := 2
LOCAL cT := "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя"
FOR EACH cC IN @cTxt
If ( nN := At(cC, cT) ) > 0
nR := 1
EXIT
EndIF
NEXT

RETURN nR

Если вернет 1 - RU866, иначе RU1251

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 2954
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 21.10.19 15:55. Заголовок: PS Можно добавить L..


PS
Можно добавить
LOCAL cdp := hb_cdpSelect("RU866")
...
hb_cdpSelect( cdp )

RETURN nR

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 6487
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 21.10.19 16:11. Заголовок: Dima пишет: cFile э..


Dima пишет:

 цитата:
cFile это имя файла или его содержимое ?


Содержимое !
У меня файлы создаются текстовые.
А база в 866 кодировке.
Что то оттуда берётся и копируется в текстовый файл-журнал.
У многих файл нормальный, а у некоторых непонятки, т.е. файл ЧЕТКО в кодировке 1251.
Но когда задаёшь IsOemText(cFile), то эта функция выдаёт .T.
Что не так в файле ? Как привести файл в чётко читаемую кодировку 1251 ?
Какие символы удалить нужно, чтобы функция IsOemText(cFile) возвращала .F. ?

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 7122
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 21.10.19 16:15. Заголовок: Andrey Сергей выше ..


Andrey
Сергей выше описал вариант

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 6488
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 21.10.19 16:18. Заголовок: Dima пишет: Сергей ..


Dima пишет:

 цитата:
Сергей выше описал вариант


Это не подходит.
Файл уже в кодировке 1251.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 7123
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 21.10.19 16:42. Заголовок: Andrey пишет: У мно..


Andrey пишет:

 цитата:
У многих файл нормальный, а у некоторых непонятки, т.е. файл ЧЕТКО в кодировке 1251.


А как он может быть в кодировке 1251 если в него пишет твоя же прога в кодировке 866 ?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 6489
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 21.10.19 16:56. Заголовок: Dima пишет: А как о..


Dima пишет:

 цитата:
А как он может быть в кодировке 1251 если в него пишет твоя же прога в кодировке 866 ?


Туда просто попадают символы какие то из 866 кодировки...
Вот и хотелось бы понять какие символы удалить/заменить допустим хотя бы через CharRepl()
чтобы IsOemText() не сбоила...
Хотя наверное нужно не мучиться, а сделать выбор через
менюшку открытие файла без автоопределения (т.е. без IsOemText() ).

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 7124
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 21.10.19 16:58. Заголовок: Andrey пишет: Туда ..


Andrey пишет:

 цитата:
Туда просто попадают символы какие то из 866 кодировки...
Вот и хотелось бы понять какие символы удалить/заменить допустим хотя бы через CharRepl()


Так вытащи такой текст и проанализируй

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 2955
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 21.10.19 17:05. Заголовок: Andrey FUNCTION Ms..


Andrey
 
FUNCTION MsgEdit(cMsg, cTitle, cIcoRes, nIcoSize, aWinFont, aWinColor, cFileCnf )
...
DEFAULT cFileCnf := "MsgEditUser.ini"

hb_memowrit('_2.txt.', cMsg)

// назначить цвета окна
aBackColor := aWinColor[1]
aFontColor := aWinColor[2]
...
@ 0, 0 LABEL Lbl0 WIDTH nWidth HEIGHT 12 VALUE "" TRANSPARENT

DRAW ICON IN WINDOW &cFormName AT nG, nG PICTURE cIcoRes WIDTH nIcoSize HEIGHT nIcoSize COLOR aBackColor

hb_memowrit('_2c.txt.', cMsg)

nCMemo := nG + nIcoSize + nG
@ nG, nCMemo EDITBOX Edit_Memo WIDTH nWMemo HEIGHT nHMemo ;
VALUE cMsg READONLY ;
BACKCOLOR {240, 240, 240} FONTCOLOR aFontColor
nY := This.Edit_Memo.Row
...

_2.txt в кодировке RU1251
_2c.txt уже фиг знает в чем

Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 253
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет