そこにある文字列について何かを読みました: http://www.lua.org/pil/2.4.html
Lua は8 ビット クリーンであるため、文字列にはゼロが埋め込まれているなど、任意の数値の文字が含まれる場合があります。
その8 ビット クリーンとは何を意味するのでしょうか。
任意の数値の文字を含めることができるのはなぜですか? (基本的な C 文字列とは異なります)
そこにある文字列について何かを読みました: http://www.lua.org/pil/2.4.html
Lua は8 ビット クリーンであるため、文字列にはゼロが埋め込まれているなど、任意の数値の文字が含まれる場合があります。
その8 ビット クリーンとは何を意味するのでしょうか。
任意の数値の文字を含めることができるのはなぜですか? (基本的な C 文字列とは異なります)
文字列を格納するには、次の 2 つの一般的な方法があります。
#1 を使用する場合、ターミネーターとして機能する 1 文字を「犠牲にする」必要があります。#2を使用すると、そのような制限はありません。
C では、文字列を格納する最初の方法を使用します。文字ゼロをターミネータとして使用します。残りの 255 文字は、文字列の文字を表すために使用できます。
Lua は文字列を格納する 2 番目の方法を使用します。Lua 文字列では、ゼロを含む 256 の可能なすべての文字値を使用できます。たとえば、文字'A'
、0
、から 3 文字の文字列を作成'B'
すると、Lua はそれを 3 文字の文字列として扱います。C で同じ文字列を作成できstrlen
ますが1
、その文字列処理ライブラリはそれを 1 文字の文字列として扱います。puts
A
Lua 文字列型は、カウントされたバイト シーケンスです。1 バイトは、0 から 255 までの任意の値を保持できます。
string 型は、文字列に使用されます。おっしゃる通り、任意のバイト値またはバイト値のシーケンスを許可する文字セット エンコーディングはほとんどありません。コード ページ 437 はそうです。256 文字を 256 の値に、1 文字あたり 1 バイトでマップします。Windows-1252 にはありません。251 文字を 251 の値に、1 文字あたり 1 バイトでマップします。UTF-8 は、1,112,064 文字を 1 ~ 4 バイトのシーケンスにマップします。ここでは、バイトの一部の値が使用されず、値のシーケンスが使用されません。
Lua 文字列ライブラリには、バイトを文字として扱う関数があります。それらの動作は、通常、C ランタイムとそのロケール機能を使用する実装のライブラリの影響を受けます。
Lua には、さまざまな文字セットのエンコーディングを明示的に処理するための専用ライブラリがあります。