我一直在寻找UTF8安全的字符串操作函数替代品.我发现了许多不同的意见和建议.我想问一下以下函数是否会导致UTF-8出现问题,如果有,我应该使用什么代替.我知道PHP手册中的mb_前缀函数列表,但我没有使用所有函数.
函数是:implode,explode,str_replace,preg_match,preg_replace
谢谢
是否有可能两者结合Bytes到WideChar,如果是,那么如何?
例如,二进制中的字母"ē"是00010011= 19和00000001= 1,或者275在一起.
var
WChar: WideChar;
begin
WChar := WideChar(275); // Result is "?"
Run Code Online (Sandbox Code Playgroud)
var
B1, B2: Byte;
WChar: WideChar;
begin
B1 := 19;
B2 := 1;
WChar := CombineBytesToWideChar(B1, B2); // ???
Run Code Online (Sandbox Code Playgroud)
如何WideChar从Delphi中的两个字节获取?
我正在使用MultiByteToWideChar将我的字符串转换为wstring.我首先尝试获得我的wstring所需的大小.根据文档传递0作为最后一个参数应该完成这个.使用MultiByteToWideChar(CP_UTF8, MB_COMPOSITE, str.c_str(), -1, nullptr, 0);返回0作为wstring缓冲区的所需大小.我已经验证str也是非空字符串.我在这做错了什么?
我已经看过有关此问题的其他几篇文章,但无法找到有关如何以编程方式确定代码点是否使用多个 2 字节(在 Windows 上)wchar_t 的任何详细信息。
一个例子:
const wchar_t* s2 = L"\U0002008A"; // The "Han" character
std::wstring in(s2); // length() == 2
Run Code Online (Sandbox Code Playgroud)
我想知道如何确定字符何时 length() > 1。