WString
 
标准数据类型:宽字符串

语法

Dim variable As WString * size
Dim variable As WString Ptr

说明

这个 WString是固定大小的宽字符数组,如果在编译时已知大小,则该字符串将永远不会溢出。它没有描述符,除非它是一个指针,否则直接使用Allocate/ Reallocate/ Deallocate.当变量具有固定的size 时,FreeBASIC通过将内容截断长度为size - 1来避免赋值时可能发生的任何溢出。

字符串的末尾由FreeBASIC字符串处理函数自动添加的字符0标记,以使字符永远不会成为WString的一部分,否则内容将被截断。当字符串创建时,字符0将被追加,长度将通过扫描第一个空字符的字符串来计算。

WString中,Len返回包含字符串的大小,SizeOf返回赋值给WString的空间。SizeOf只有当编译器知道大小时才有效,即直接传递固定大小的WString变量,而不是作为取消引用的指针或ByRef函数参数。

此类型用于支持非拉丁语字母。任何内在的字符串函数,如Left也可以与WString一起使用,任何字符串操作符也可以使用。

除了具有Unicode转义序列(\\ u)的ASCII文件,FreeBASIC可以解析UTF-8,UTF-16LE,UTF-16BE,UTF-32LE和UTF-32BE源文件。

FreeBASIC文本文件功能可以以不同的编码读取和写入Unicode文件,前提是打开文件时指定了Encoding.文本被自动转换为读取的内部编码,并在写入时转换回文件编码。

SizeOfWString)返回当前平台中WString个字符使用的字节数。

例子

Dim As WString * 13 str1 => "你好,世界"
Print str1
Print Len(str1)    '返回12,它包含的字符串的长度
Print SizeOf(str1) '返回13 * sizeof(wstring),变量使用的字节数


Dim As WString Ptr str2
str2 = Allocate( 13 * Len(WString) )
*str2 = "你好,世界"
Print *str2
Print Len(*str2)      '返回12,它指向的字符串的长度


平台差异

支持wstrings依赖于平台中可用的C运行时库,内部格式可能会有所不同。
    • FreeBASIC的DOS端口不支持Unicode。在这个端口中,一个字符总是占用1个字节,Wstrings将作为标准ASCII Zstrings
    • 在Win32 wstrings以UCS-2(UTF-16 LE)编码,一个字符占用2个字节。
    • 在Linux上,wstrings被编码在UCS-4中,一个字符占用了4个字节。

方言差异

  • 除非使用别名__Wstring引用,否则不适用于-lang qb 方言。

与QB差别

  • 新的FreeBASIC

参考