UTF16是变长编码,大部分字符用2个字节表示,其余则需要用长于2个字节来表示。
12 个解决方案
#1
不是UTF-16
win下是UCS2,是定长编码
*nix下是UTF-32,也是定长的
win下是UCS2,是定长编码
*nix下是UTF-32,也是定长的
#2
不可能的,UCS2是两个字节最多表示65536个字符,但Unicode字符表,已经增加到11万多个字符了。
win是utf16,变长编码。
win是utf16,变长编码。
#3
查了资料,UCS2就是UTF-16,是变长编码。
#4
刚才说错了,但Unicode字符表,应该四已经增加到110多万个字符了。
#5
UTF16不是变长编码,它是采用固定的2个字节存储一个符号。
UTF8才是变长编码,一个符号可能用1个字节、2个字节、3个字节或者四个字节表示,具体区分方法为:
对于单字节的符号,字节的第一位(最高位)设为0,对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。
UTF8才是变长编码,一个符号可能用1个字节、2个字节、3个字节或者四个字节表示,具体区分方法为:
对于单字节的符号,字节的第一位(最高位)设为0,对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。
#6
Unicode字符表,已经增加到110多万个字符了。 不可能两个字节,完全不够用。
#7
UTF16是变长编码
#8
UCS和UNICODE是不同的字符集
国际标准 ISO 10646 定义了通用字符集 (Universal Character Set)。它是与UNICODE同类的组织,UCS-2和UNICODE兼容,UCS有UCS-2和UCS-4两种格式,分别是2字节和4字节.
UNICODE字符集具体编码又分为UTF8、UTF16和UTF32,其中UTF8为变长,UTF16和UTF32分别用2个和4个字节存储符号。
#9
请单步调试一下,看wstr里面有多少个汉字,然后在看看size_Bytes结果是两个字节,还是四个字节。
int b[2] = {0xdc3ad866, 0};
wchar_t * b1 = (wchar_t *)(&b);
std::wstring wstr = b1;
int size_Bytes = wstr.size() * 2;
查了资料,UCS2就是UTF-16,是变长编码。
不是UTF-16
win下是UCS2,是定长编码
*nix下是UTF-32,也是定长的
UCS和UNICODE是不同的字符集
国际标准 ISO 10646 定义了通用字符集 (Universal Character Set)。它是与UNICODE同类的组织,UCS-2和UNICODE兼容,UCS有UCS-2和UCS-4两种格式,分别是2字节和4字节.
UNICODE字符集具体编码又分为UTF8、UTF16和UTF32,其中UTF8为变长,UTF16和UTF32分别用2个和4个字节存储符号。
#10
请单步调试一下,看wstr里面有多少个汉字,然后在看看size_Bytes结果是两个字节,还是四个字节。
int b[2] = {0xdc3ad866, 0};
wchar_t * b1 = (wchar_t *)(&b);
std::wstring wstr = b1;
int size_Bytes = wstr.size() * 2;
int b[2] = {0xdc3ad866, 0};
wchar_t * b1 = (wchar_t *)(&b);
std::wstring wstr = b1;
int size_Bytes = wstr.size() * 2;
不是UTF-16
win下是UCS2,是定长编码
*nix下是UTF-32,也是定长的
#11
UTF16我记得除了surrogate pairs其他都是一个字符2字节啊。如果我没记错的话,那计算长度的逻辑只是判断字符是不是surrogate pair,是的话那2个2字节算1个字符,否则就1个2字节算1个字符。这逻辑简单到自己都可以写。
#12
win里有无api可实现?
UTF16我记得除了surrogate pairs其他都是一个字符2字节啊。如果我没记错的话,那计算长度的逻辑只是判断字符是不是surrogate pair,是的话那2个2字节算1个字符,否则就1个2字节算1个字符。这逻辑简单到自己都可以写。
#1
不是UTF-16
win下是UCS2,是定长编码
*nix下是UTF-32,也是定长的
win下是UCS2,是定长编码
*nix下是UTF-32,也是定长的
#2
不可能的,UCS2是两个字节最多表示65536个字符,但Unicode字符表,已经增加到11万多个字符了。
win是utf16,变长编码。
win是utf16,变长编码。
不是UTF-16
win下是UCS2,是定长编码
*nix下是UTF-32,也是定长的
#3
查了资料,UCS2就是UTF-16,是变长编码。
不是UTF-16
win下是UCS2,是定长编码
*nix下是UTF-32,也是定长的
#4
刚才说错了,但Unicode字符表,应该四已经增加到110多万个字符了。
#5
UTF16不是变长编码,它是采用固定的2个字节存储一个符号。
UTF8才是变长编码,一个符号可能用1个字节、2个字节、3个字节或者四个字节表示,具体区分方法为:
对于单字节的符号,字节的第一位(最高位)设为0,对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。
UTF8才是变长编码,一个符号可能用1个字节、2个字节、3个字节或者四个字节表示,具体区分方法为:
对于单字节的符号,字节的第一位(最高位)设为0,对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。
#6
Unicode字符表,已经增加到110多万个字符了。 不可能两个字节,完全不够用。
UTF16不是变长编码,它是采用固定的2个字节存储一个符号。
UTF8才是变长编码,一个符号可能用1个字节、2个字节、3个字节或者四个字节表示,具体区分方法为:
对于单字节的符号,字节的第一位(最高位)设为0,对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。
#7
UTF16是变长编码
UTF16不是变长编码,它是采用固定的2个字节存储一个符号。
UTF8才是变长编码,一个符号可能用1个字节、2个字节、3个字节或者四个字节表示,具体区分方法为:
对于单字节的符号,字节的第一位(最高位)设为0,对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。
#8
查了资料,UCS2就是UTF-16,是变长编码。
不是UTF-16
win下是UCS2,是定长编码
*nix下是UTF-32,也是定长的
UCS和UNICODE是不同的字符集
国际标准 ISO 10646 定义了通用字符集 (Universal Character Set)。它是与UNICODE同类的组织,UCS-2和UNICODE兼容,UCS有UCS-2和UCS-4两种格式,分别是2字节和4字节.
UNICODE字符集具体编码又分为UTF8、UTF16和UTF32,其中UTF8为变长,UTF16和UTF32分别用2个和4个字节存储符号。
#9
请单步调试一下,看wstr里面有多少个汉字,然后在看看size_Bytes结果是两个字节,还是四个字节。
int b[2] = {0xdc3ad866, 0};
wchar_t * b1 = (wchar_t *)(&b);
std::wstring wstr = b1;
int size_Bytes = wstr.size() * 2;
查了资料,UCS2就是UTF-16,是变长编码。
不是UTF-16
win下是UCS2,是定长编码
*nix下是UTF-32,也是定长的
UCS和UNICODE是不同的字符集
国际标准 ISO 10646 定义了通用字符集 (Universal Character Set)。它是与UNICODE同类的组织,UCS-2和UNICODE兼容,UCS有UCS-2和UCS-4两种格式,分别是2字节和4字节.
UNICODE字符集具体编码又分为UTF8、UTF16和UTF32,其中UTF8为变长,UTF16和UTF32分别用2个和4个字节存储符号。
#10
请单步调试一下,看wstr里面有多少个汉字,然后在看看size_Bytes结果是两个字节,还是四个字节。
int b[2] = {0xdc3ad866, 0};
wchar_t * b1 = (wchar_t *)(&b);
std::wstring wstr = b1;
int size_Bytes = wstr.size() * 2;
int b[2] = {0xdc3ad866, 0};
wchar_t * b1 = (wchar_t *)(&b);
std::wstring wstr = b1;
int size_Bytes = wstr.size() * 2;
不是UTF-16
win下是UCS2,是定长编码
*nix下是UTF-32,也是定长的
#11
UTF16我记得除了surrogate pairs其他都是一个字符2字节啊。如果我没记错的话,那计算长度的逻辑只是判断字符是不是surrogate pair,是的话那2个2字节算1个字符,否则就1个2字节算1个字符。这逻辑简单到自己都可以写。
#12
win里有无api可实现?
UTF16我记得除了surrogate pairs其他都是一个字符2字节啊。如果我没记错的话,那计算长度的逻辑只是判断字符是不是surrogate pair,是的话那2个2字节算1个字符,否则就1个2字节算1个字符。这逻辑简单到自己都可以写。