UTF-8、UTF-16和UTF-32有什么区别?
我理解它们都可以存储Unicode,并且每种编码使用不同数量的字节来表示字符。是否有选择一种编码比另一种更具优势的情况呢?
UTF-8、UTF-16和UTF-32有什么区别?
我理解它们都可以存储Unicode,并且每种编码使用不同数量的字节来表示字符。是否有选择一种编码比另一种更具优势的情况呢?
根据你的开发环境,你可能没有选择字符串数据类型内部使用的编码方式。
但是,如果有选择的话,我建议在存储和交换数据时始终使用UTF-8。如果你的数据主要是ASCII数据,这将为你提供传输最少量的数据,同时仍能够编码所有内容。在现代计算机上,优化I/O最小化是正确的方法。
阅读完答案后,UTF-32需要一些关注。
C#:
Data1 = RandomNumberGenerator.GetBytes(500_000_000);
sw = Stopwatch.StartNew();
int l = Encoding.UTF8.GetString(Data1).Length;
sw.Stop();
Console.WriteLine($"UTF-8: Elapsed - {sw.ElapsedMilliseconds * .001:0.000s} Size - {l:###,###,###}");
sw = Stopwatch.StartNew();
l = Encoding.Unicode.GetString(Data1).Length;
sw.Stop();
Console.WriteLine($"Unicode: Elapsed - {sw.ElapsedMilliseconds * .001:0.000s} Size - {l:###,###,###}");
sw = Stopwatch.StartNew();
l = Encoding.UTF32.GetString(Data1).Length;
sw.Stop();
Console.WriteLine($"UTF-32: Elapsed - {sw.ElapsedMilliseconds * .001:0.000s} Size - {l:###,###,###}");
sw = Stopwatch.StartNew();
l = Encoding.ASCII.GetString(Data1).Length;
sw.Stop();
Console.WriteLine($"ASCII: Elapsed - {sw.ElapsedMilliseconds * .001:0.000s} Size - {l:###,###,###}");
UTF-8 -- 耗时9.939秒 - 大小473,752,800
Unicode -- 耗时0.853秒 - 大小250,000,000
UTF-32 -- 耗时3.143秒 - 大小125,030,570
ASCII -- 耗时2.362秒 - 大小500,000,000
UTF-32 -- MIC DROP
http://www.cs.tut.fi/~jkorpela/chars.html#ascii
不要指望完全理解它,但如果您不想以后遇到问题,尽可能早地学习尽可能多的知识是值得的(或者让别人为您解决)。