每次将余弦传递给 ReadString 时都必须使用L吗?
s = MyIni->ReadString (L"ü", L"SomeEntry", "");
Embarcadero 示例没有这样说,但他们也没有在示例中使用非 ASCII 字符。
每次将余弦传递给 ReadString 时都必须使用L吗?
s = MyIni->ReadString (L"ü", L"SomeEntry", "");
Embarcadero 示例没有这样说,但他们也没有在示例中使用非 ASCII 字符。
在 C++Builder 2009 及更高版本中,整个 RTL 基于System::UnicodeString
而不是System::AnsiString
. 使用L
前缀告诉编译器创建一个宽字符串文字(基于wchar_t
)而不是窄字符串文字(基于char
)。
虽然您不必使用前缀L
,但您应该使用它,因为它在运行时调用的开销更少。在 Windows 上,UnicodeString
从wchar_t
字符串构造 a 只是一个简单的内存副本,而从char
字符串构造它会执行数据转换(使用System::DefaultSystemCodePage
变量作为用于转换的代码页)。对于非 ASCII 字符,这种转换可能是有损的,具体取决于窄字符串的编码,这取决于您保存源文件的字符集,以及编译器在解析源文件时使用的字符集。因此,不能保证您在代码中以窄字符串文字编写的内容就是您在运行时实际得到的内容。用一个宽字符串文字避免了这种歧义。
请注意,UnicodeString
它在所有平台上都是 UTF-16 编码的,但wchar_t
仅在 Windows 上用于 UTF-16,其中wchar_t
16 位数据类型。在其他平台上,wchar_t
通常使用 UTF-32 的 32 位数据类型来char16_t
代替。因此,如果您需要编写可移植代码,请使用 RTL 的_D()
宏而不是L
直接使用前缀,例如:
s = MyIni->ReadString(_D("ü"), _D("SomeEntry"), _D(""));
_D()
将字符串/字符文字映射到正确的数据类型(wchar_t
或char16_t
,取决于您正在编译的平台)。因此,在 RTL、VCL 和 FMX 库中使用字符串/字符文字时,您应该养成始终使用_D()
.