Проблема с кодировкой после преобразования PB7 в PB10.5

После того, как я перешел с PB7 на 10.5, у меня возникла проблема со старым хранилищем базы данных SQL Server. Арабский символ показывает символы в окне данных как странные символы, которые не имеют значения, например ÓíÇÑÉ ÕÛíÑÉ?


person PBDev    schedule 26.08.2011    source источник
comment
См. stackoverflow.com/questions/7092378/. Это может помочь вам.   -  person Hugh Brackett    schedule 30.08.2011


Ответы (1)


Две вещи, на которые нужно обратить внимание при переходе на PB10 или выше. Строки в вызовах внешних функций и любые данные, прочитанные в файлах, таких как INI-файлы или функции чтения файлов. Причина в том, что PB10 была версией, в которой строки основывались на Unicode, а не на ANSI.

Вы начнете сталкиваться с проблемами, когда ваши строковые данные содержат символы мусора, когда раньше они работали нормально. Хорошей новостью является то, что PB предоставляет способ преобразования строки в требуемый формат, и есть функции для обоих.

Кодировка PB10 по умолчанию — UTF-16, прямой порядок байтов (EncodingUTF16LE!)

В PB10 функции PowerScript Len(), Left(), Mid() и Right() основаны на символах Unicode и эквивалентны существующим функциям LenW(), LeftW(), MidW() и RightW(). .

Для работы со строками как с байтами или символами ASCII вместо символов Unicode был добавлен новый набор функций LenA(), LeftA(), MidA() и RightA(). Когда применяются функции «A», PowerBuilder преобразует строку Unicode в строку DBCS в зависимости от языкового стандарта компьютера, а затем применяет операцию. это любое чтение/запись файлов, потому что около PB10 он перешел на юникод. PB преобразовал все существующие функции в Unicode и создал новые версии функций. Так в PB10 функции Powerscript Len(), Left(), Mid() были изменены на юникод и новые функции Len.

 Blob lbl_data
 lbl_data = Blob("Hello World!", EncodingANSI!)
 ls_data = String(lbl_data, EncodingANSI!)


 // PB10 and higher
 li_FileNum = FileOpen("MyFile.txt", TextMode!, Read!, EncodingANSI!)

 // PB9 and lower you didn't need EncodingANSI!
 //li_FileNum = FileOpen("MyFile.txt", TextMode!)

Что произойдет, если вы не добавите EncodingANSI! ? Все данные, которые вы получите из внешних файлов, будут нечитаемыми мусорными символами. Это самая серьезная проблема при обновлении до PB10 и выше, но ее очень просто решить, как только вы ее выясните.

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

person Rich Bianco    schedule 29.09.2011
comment
у меня нет проблем с чтением строк во внешних функциях или файлах, у меня проблемы с хранением данных на арабском языке в базе данных SQL-сервера, данные в таблице базы данных показывают символы в виде странных символов, которые не имеют значения, например ÓíÇÑÉ ÕÛíÑÉ, когда я читаю эти данные, используя PB7 кажется хорошим и читаемым, при чтении с помощью PB10.5 он кажется нечитаемым - person PBDev; 04.10.2011