PowerBuilder内部使用UTF-16LE编码。PBL中的源代码以UTF-16LE编码,应用程序中输入的任何文本都会自动转换为Unicode,字符串和字符PowerScript数据类型仅包含Unicode数据。分配给这些数据类型的任何ANSI或DBCS字符都会在内部转换为Unicode编码。
支持Unicode数据库
大多数PowerBuilder数据库接口都支持ANSI和Unicode数据库。
Unicode数据库是一种字符集设置为Unicode格式(如UTF-8或UTF-16)的数据库。数据库中的所有数据都是Unicode格式的,保存到数据库中的任何数据都必须隐式或显式转换为Unicode数据。
使用ANSI(或DBCS)作为字符集的数据库可以使用特殊的数据类型来存储Unicode数据。这些数据类型是NChar、NVarChar和NVarChar2。具有这些数据类型之一的列可以存储Unicode数据,但保存到此类列的数据必须显式转换为Unicode。
有关每个接口的更多详细信息,请参阅连接到数据库。
字符串函数
PowerBuilder字符串函数,如Fill、Len、Mid和Pos,将字符而不是字节作为参数或返回值,并在所有环境中返回相同的结果。这些函数有一个“宽”版本(如FillW),该版本已经过时,将在PowerBuilder的未来版本中删除,因为它产生的结果与标准版本的函数相同。其中一些函数也有ANSI版本(如FillA)。此版本为DBCS环境中的用户提供向后兼容性,这些用户在PowerBuilder的早期版本中使用标准版本的字符串函数返回字节而不是字符。
您可以使用GetEnvironment函数来确定环境中使用的字符集:
环境环境(env)选择case env.charsetcase charsetdbcs!//DBCS处理中。。。case字符unicode!//Unicode处理中。。。case charsetansi!//ANSI处理中。。。case else//其他处理。。。end choose编码枚举
包括Blob、BlobEdit、FileEncoding、FileOpen、SaveAs和String在内的几个函数都有一个可选的编码参数。这些函数允许您使用ANSI、UTF-8、UTF-16LE和UTF-16BE编码的blob和文件。如果不指定此参数,则用于“另存为”和“文件打开”的默认编码为ANSI。对于其他函数,默认值是UTF-16LE。
以下示例说明了如何使用FileOpen打开不同类型的文件:
//读取ANSI文件整数li_FileNumString s_recili_FileNum=FileOpen(“Employee.txt”)//或://li_FileNum=FileOpen(“Employee.imp”,流模式!,读!)FileRead(li_FileNum,bal_rec)初始化文件
SetProfileString函数可以在Windows系统上以ANSI或UTF16-LE编码写入初始化文件,在UNIX系统上则以ANSI或UTF-16-BE编码写入。ProfileInt和ProfileString PowerScript函数以及DataWindow表达式函数可以读取具有这些编码方案的文件。
进出口来源
“导出库条目”对话框允许您选择导出文件的编码类型。选项有ANSI/DBCS,它允许您将文件导入PowerBuilder 9或更早版本、HEXASCII、UTF8或Unicode LE。
HEXASCII导出格式用于受源代码控制的文件。Unicode字符串在导出的文件中由十六进制/ASCII字符串表示,该文件的头部开头有字母HA,用于将其标识为可能包含此类字符串的文件。您无法将HEXASCII文件导入PowerBuilder 9或更早版本。
如果从PowerBuilder 9或更早版本导入导出的文件,则在将对象添加到PBL之前,文件中的源代码将转换为Unicode。
外部功能
当您调用返回ANSI字符串或具有ANSI字符串参数的外部函数时,必须在外部函数声明中使用ALIAS子句并添加;函数名的ansi。例如:
FUNCTION int MessageBox(int句柄、字符串内容、字符串标题、int showtype)LIBRARY“user32.dll”ALIAS FOR“MessageBoxA;ansi”以下声明适用于使用Unicode字符串的“宽”版本的函数:
FUNCTION int MessageBox(int句柄、字符串内容、字符串标题、int showtype)LIBRARY“user32.dll”ALIAS FOR“MessageBoxW”如果您从PowerBuilder 9或更早版本迁移应用程序,PowerBuilder会自动用正确的语法替换使用ANSI字符串的函数声明。
设置字体以支持多种语言
“系统选项”和“设计选项”对话框中的默认字体是Tahoma。
将“系统选项”对话框中的字体设置为Tahoma可确保多种语言在“窗口”、“用户对象”和“菜单”绘制器的“布局”和“属性”视图以及向导中正确显示。
如果“设计选项”对话框中“编辑器字体”页面上的字体未设置为Tahoma,则无法在脚本视图、文件和源代码编辑器、数据库绘制器中的ISQL视图以及调试窗口中显示多种语言。
您可以在“设计选项”对话框的“脚本”视图、“文件”和“源代码”编辑器以及数据库绘制器中的ISQL视图的“打印机字体”选项卡页面上选择其他字体进行打印。如果打印机字体设置为Tahoma,但打印机上未安装Tahoma字体,则PowerBuilder在遇到多语言字符时会将整个字体集下载到打印机。如果需要打印多语言字符,请指定打印机上安装的打印机字体。
要在DataWindow对象中支持多种语言,请将每列和文本控件中的字体设置为Tahoma。
打印功能的默认字体是系统字体。使用PrintDefineFont和PrintSetFont函数指定用户打印机上可用且支持多种语言的字体。
PBNI
PowerBuilder本机接口基于Unicode。必须在C++开发环境中使用_UNICODE预处理器指令编译PBNI扩展。
您的扩展代码必须使用TCHAR、LPTSTR或LPCTSTR,而不是char、char*和const char*,以确保它在Unicode环境中正常工作。或者,您可以使用MultiByteToWideChar函数将字符串映射到Unicode字符串。有关在应用程序中启用Unicode的更多信息,请参阅C++开发环境的文档。
为Web服务启用Unicode
在PowerScript目标中,Web服务客户端应用程序实例化的PBNI扩展类对所有内部处理都使用Unicode。但是,对组件方法的调用会转换为ANSI,以便由EasySoap进行处理,并且这些调用返回的数据会转换为Unicode。
XML字符串编码
XML解析器无法解析使用八位字符代码(如windows-1253)的字符串。例如,无法解析具有以下声明的字符串:
字符串ls_xml ls_xml+='<?xml版本=“1.0”编码=“windows-1253”?>'您必须使用Unicode编码值,如UTF16-LE。
PowerBuilder12.5中的Unicode支持
最新推荐文章于 2024-09-26 20:14:58 发布