Проблема кодирования после преобразования PB7 в PB10.5 - PullRequest
0 голосов
/ 26 августа 2011

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

1 Ответ

0 голосов
/ 29 сентября 2011

Две вещи, на которые нужно обратить внимание при переходе на 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 он перешел на Unicode.PB преобразовал все существующие функции в Unicode и создал новые версии функций.Поэтому в PB10 функции Powerscript Len (), Left (), Mid () были заменены на Unicode, а новые функции 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 и выше, но ее очень просто решить, как только вы ее выясните.

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

...