FreeBASIC Wstring (文字)
目次→言語リファレンス→変数とデータ型→標準のデータ型→文字型→WSTRING (文字)←オリジナル・サイト
目次→ランタイム・ライブラリー参考→文字列関数→WSTRING (文字)←オリジナル・サイト
★このページの html は、UTF-8 です。★
標準のデータ型:
ワイド文字列
(英数字のように、1バイトではなく、日本語のようにマルチ・バイトで表現される文字の文字列)
構文:
記述:
Wstring は、広い文字の、固定サイズの配列で、コンパイル時にサイズが分かっていれば、決してあふれることはありません。
これは記述子を持っていません。そして、ポインターで
Allocate/
Reallocate/
Deallocate を直接使わない限り、サイズが変更されることはありません。
固定
size の変数(数値定数、コンパイル時に評価できる式)の場合、FreeBASICは、内容を
size - 1 の長さに切り捨てることで、代入で発生しうる桁あふれを避けています。
文字列の終わりは、FreeBASIC の文字列処理関数により自動的に追加される文字 0 により明示されます。
このため、文字 0 は、
Wstring の一部であってはなりません。さもないと、内容は切りつめられてしまいます。
文字列が作成される時に、文字 0 が付加されます。そして、長さは、文字列で、最初のヌル文字を走査することによって計算されます。
Wstring で、
Len は含まれた文字列のサイズを返します。そして、
Sizeof は、
Wstring に割り当てられるスペースを返します。
Sizeof は、コンパイラがサイズを知っている場合、つまり、固定サイズの
Wstring 変数が、逆参照されたポインタや
Byref 関数の引数としてではなく、直接渡された場合にのみ動作します。
この型は、非ラテン文字をサポートするために提供します。
Left のような、組み込みの文字列関数は、文字列演算子と同様に
Wstring でも動作します。
ソース・ファイルを処理するとき、FreeBASIC は、ユニコード・エスケープ文字列(\u)、UTF-8、UTF-16LE、UTF-16BE、UTF-32LE、UTF-32BE で ASCII ファイルを解析できます。
ただし、
Byte Order Mark(BOM) 付きで保存されている場合に限ります。
一般に UTF-8 は BOM 無しも許されますが、FreeBASIC では UTF-8 として認識するために BOM が必要であることに注意して下さい。
WStr 関数を使うと、ASCII 文字列を、ユニコード文字列に変換できます。
注意: クロスプラットフォーム で最も信頼性の高いコードは、ASCII/UTF-8 文字で BOM なしでエンコードすることによって得られます。
FreeBASIC テキストファイル関数は、ファイルを開くときに
encoding が指定されると、異なるエンコーディングのユニコード・ファイルを、読み書きできます。 テキストは、自動的に、読み込むときに内部のエンコーディングに変換され、書き出すときにファイル・エンコーディングに変換戻しされます。
sizeof(
Wstring ) は、現在のプラットホームの
Wstring 文字によって使われたバイト数を返します。
Wstring に動的メモリを割り当てる場合、最も安全なのは、ヌル文字(
Wstring の終端文字)なしの文字列データの作成を避けるために、
Callocate を使うことです(または、最悪の場合、2番目の例のように、文字列データの即時割り当てが続く
Allocate を使います)。
注:
二項演算子(代入、等号、+、*、...)の演算対象が、'
Wstring Ptr' ポインタ ('
pw') の逆参照で構成される場合、他の演算対象に応じて、'
Wstring' 文字列または '
Numeric' 変数を与えることができます 。
他の演算対象が、数値の場合、逆参照された '
Wstring Ptr' ポインタ ('
*pw') は、示された 1文字への '
Numeric' 参照として扱われます。
'
Wstring' ポインター索引 '
[]' 演算子が、逆参照構文 ('
pw[n]') として使われる場合、基本的に '
String' 索引 '
[]' 演算子('
(*pw)[n]') の短縮バージョンです。
例:
Dim As WString * 13 str1 => "hello, world"
Print str1
Print Len(str1) '12 と表示されます。それが含む文字列の長さを返します。
Print SizeOf(str1) '13 と表示されます。 * sizeof(wstring), 変数で使われるバイト数
Sleep
Dim As WString Ptr str2
str2 = Allocate( 13 * Len(WString) )
*str2 = "hello, world"
Print *str2
Print Len(*str2) '12 と表示されます。それが示す文字列の長さを返します。
Sleep
下は、MessageBox に、日本語を表示する例です。このコードは、UNICODE で保存して下さい。
注:MessageBox()の構文
int MessageBox(HWND hWnd , LPCTSTR lpText , LPCTSTR lpCaption , UINT uType)
hWnd - オーナーウィンドウを指定。NULLの場合はオーナーウィンドウを持ちません
lpText - メッセージボックスに表示する文字列
lpCaption - タイトルバーに表示される文字列
uType - メッセージボックスの内容
戻り値 - メッセージボックスの押されたボタンを整数値で返します
MessageBox の詳細は、下記を参照下さい。
Win32API メッセージボックス
下は、MessageBox に、中国語を表示する例です。このコードは、UNICODE で保存して下さい。
プラットホーム差:
wstringsのサポートは、そのプラットホームで利用可能な Cランタイム・ライブラリに依存します。内部形式は、異なるかもしれません。
-
Unicode は、FreeBASIC の DOSポートでサポートされません。
このポートでは、文字は常に1バイトを占有し、Wstrings は、標準のASCII Zstrings として振舞います。
- Win32 では、FreeBASIC の wstring は UCS-2 でエンコードされています。
UCS-2 は 1 文字に 2 バイト (16 ビット) を使うため、Unicode の最初の 65,536 コードポイント、つまり BMP (Basic Multilingual Plane) しかエンコードできません。
FreeBASIC は、BMP 以外の Win32 UTF-16 4-byte サロゲート・エンコーディングをサポートしていません。
-
リナックスでは、wstringsは、UCS-4でエンコードされます。そして、文字は4バイト取ります。
方言差:
-
別名__Wstringで参照を付けない場合、-lang qb 方言で利用できません。
QBからの違い:
参照:
ページ歴史:2022-04-07 13:23:29
日本語翻訳:WATANABE Makoto、原文著作者:SysOp