|
|
|
Люди, что за автозамена буквы "і" при REPLACE?
|
|||
|---|---|---|---|
|
#18+
Прикол свзязан с украинской буквой "і" Присваиваю переменной sName значение с украинскими буквами "і", спрашиваю (105 код - это латинская "i"): ?CHR(105)$sname отвечает - .F. делаю REPLACE ab_name WITH sname спрашиваю: ?CHR(105)$ab_name отвечает - .Т. Блин, что за автозамена такая хитрая происходит всех украинских букв "і" на латинские??? Главное у меня потом поиск не пашет нормально! Ведь остальные-то, характерные только для укр. языка символы не заменяются... с другой стороны оно и понятно - нет латинских аналогов... Интересно что операторы при вводе данных в базу используют при вводе украинский язык, а фокса при внесении этих данных непосредственно в БД получается незаметно заменяет эти буквы. А я тока ща расчехлился, написал быренько конвертилку, она отработала и потом я битый час удивлялся и мучался почему конвертилка ничего в БД не изменила... Может проблема в кодовой странице, присвоенной базе? Тогда как объяснить нормальное отображение остальных спецефичных укр. букв? фокса 8я, в Options/General чекбокс Use system settings не стоит, винда ХРНЕ SP1, региональные установки Языковые стандарты - Русский, Расположение - Украина ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2006, 12:42 |
|
||
|
Люди, что за автозамена буквы "і" при REPLACE?
|
|||
|---|---|---|---|
|
#18+
Файл CONFIG.FPW со строкой CODEPAGE=1251 - есть? Что возвращают функции ?CPCURRENT() ?CPDBF("MyTable") ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2006, 13:33 |
|
||
|
Люди, что за автозамена буквы "і" при REPLACE?
|
|||
|---|---|---|---|
|
#18+
Файл CONFIG.FPW со строкой CODEPAGE=1251 есть и лежит в c:\Program Files\Microsoft Visual FoxPro 8\ работает однозначно, т.к. в нем кастом-имя основного окна и оно соотв. так и называецца при запуске фоксы. ?CPCURRENT() 1251 ?CPDBF("MyTable") 866 :) ну так в 866 таблице все равно есть все укр. буквы. Или это оно так мне автоматом конвертит из среды фоксятины 1251 в КС базы 866? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2006, 14:45 |
|
||
|
Люди, что за автозамена буквы "і" при REPLACE?
|
|||
|---|---|---|---|
|
#18+
Если буква одинаково выглядит в разных кодовых страницах - это вовсе не означает, что она имеет один и тот же ASCII-код. Какой тогда вообще смысл в кодовых страницах? Посмотри реальный ASCII-код нужной буквы в переменной памяти. Скорее всего, он будет отличаться от 105 Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Именно поэтому, делать поиск опираясь на ASCII-коды в разных кодовых страницах - бессмысленно. Необходимо искать сам символ. Текст. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2006, 14:56 |
|
||
|
Люди, что за автозамена буквы "і" при REPLACE?
|
|||
|---|---|---|---|
|
#18+
насколько я знаю, нормальной человеческой функции изменения КС в БД не существует. У меня есть програмка которая меняет КС в БД: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 201 - соответствует КС-1251 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2006, 15:04 |
|
||
|
Люди, что за автозамена буквы "і" при REPLACE?
|
|||
|---|---|---|---|
|
#18+
Дык ведь в том-то и весь прикол, что переменная которую я риплейсю в поле БД НЕ содержит символов с кодом 105, но с кодом 179. А как тока случается риплейс то все символы с кодом 179 превращаются в символы с кодом 105. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2006, 15:10 |
|
||
|
Люди, что за автозамена буквы "і" при REPLACE?
|
|||
|---|---|---|---|
|
#18+
Вы вообще в курсе, что такое "кодовая страница" и для чего она нужна? Ведь физически хрянятся вовсе не буквы, а числа (ASCII-коды). У системы есть некая "карта соответствия", что вот такой ASCII-код надо отобразить вот таким символом. Какой код каким символом отображается и определяет кодовая страница. Когда Вы набираете текст в FoxPro, то Вы набираете текст в кодовой странице 1251. В этой кодовой странице букве "i" соответствует ASCII-код 179. Когда Вы записываете информацию из кодовой страницы 1251 в кодовую страницу 866, то FoxPro автоматически выполняет преобразование. Цель этого преобразования в том, чтобы "картинка" символа, созданного в 1251 в кодовой странице 866 осталась такой же. Т.е. необходимо подставить другой ASCII-код для того же самого символа. Какая разница, как там часы "тикают"! Пользователь работает с текстом. С "картинкой". Именно на неизменность "картинки" и направлены все преобразования. ASCII-код - это "внутренняя механика" обеспечивающая нужную картинку в соответствующей кодовой странице. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2006, 15:46 |
|
||
|
Люди, что за автозамена буквы "і" при REPLACE?
|
|||
|---|---|---|---|
|
#18+
Да елки-палки!!! Это все понятно! Ну Вы так это подаете, как будто в фоксе зашита система OCR которая сканит экран и потом пытается найти соответсвие... Но это же не так. Я так себе представляю - есть некие таблицы преобразования из одной КС в другую. Например там символу с кодом А в 1251 соответствует символ с кодом В в 866. Пользуясь этими таблицами фокса и конвертит. Иначе как тогда объяснить нормальное транслирование букв е, Е, а, А, Н, К и пр. которые есть в латинице с таким же изображением. Проблема получается в том, что происходит некорректное преобразование, когда именно названная мною буква из украинского алфавита зачем-то транслируется в латиницу. Ведь есть же в 866 КС соответствующая буква, или я ошибаюсь? Я програмлю со времен ДОСа и 2,6 фокса и была в 866 КС такая буква как и другие присущие украинскому языку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2006, 17:16 |
|
||
|
Люди, что за автозамена буквы "і" при REPLACE?
|
|||
|---|---|---|---|
|
#18+
позволю себе огласить проблему еще раз: итак, проблема заключается в том, что фокса некореектно контвертит украинскую букву "i" из кодовой страницы 1251 в 866 превращая ее в латинкую букву ай, которая выглядит аналогично. а должна бы была транслировать в укр. букву "i" чей код в 866 таблице я точно не помню, но он за 200 где-то. вроде 247... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2006, 17:28 |
|
||
|
Люди, что за автозамена буквы "і" при REPLACE?
|
|||
|---|---|---|---|
|
#18+
ёлки! я догадываюсь что проблема более гловального масштаба - в 866 странице вообще нет украинской буквы i/I... есть такая с двумя точками сверху, есть обёрнутая э/Э, а той, что нужно - нету... потому матричники до сих пор эту букву не чепятают, а вместо нее у с галочкой, котора ваще, кажися, белорусская буква какая-то... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2006, 17:32 |
|
||
|
Люди, что за автозамена буквы "і" при REPLACE?
|
|||
|---|---|---|---|
|
#18+
Hi CTAC-KO! в CP866 никогда и не было украинской i - там массу места занимала псевдографика... Вот i с двумя точками там была. Белорусская у краткая тоже там есть. Поскольку "отображение" латинской и кириллической i полностью совпадает, то и происходит подобная конвертация при преобразовании между CP 1251 и CP 866. А в cp1251 (и в некоторых других CP кстати тоже) действительно есть свой собственный "код" для кириллической буквы i. "Двойная конвертация" (сначала из "текущей" 1251 в 866 для записи на диск, а потом наоборот - из 866 на диске в "текущую" 1251 в среде программы) как раз и приводит к "потере соответствия". Вот простая программа, показывающая все потенциальные проблемы, возникающие при подобной схеме работы (т.е. использовании "неродной" CP в DBF) FOR ln1 = 0 TO 255 IF ASC(CPCONVERT(866,1251,CPCONVERT(1251,866,CHR(m.ln1)))) # m.ln1 ? m.ln1, ASC(CPCONVERT(866,1251,CPCONVERT(1251,866,CHR(m.ln1)))), CHR(m.ln1), CPCONVERT(866,1251,CPCONVERT(1251,866,CHR(m.ln1))) ENDIF ENDFOR Как видишь есть целая куча кодов которые вообще "теряются" - т.е. даже визуально выглядят по иному после конвертации. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2006, 18:10 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=33649946&tid=1591936]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
191ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
63ms |
get tp. blocked users: |
1ms |
| others: | 214ms |
| total: | 509ms |

| 0 / 0 |
