繁体   English   中英

utf16字符串的长度为utf8字符串

[英]Length of a utf16 string as a utf8 string

我有一个utf16 wchar_t *我需要转换并转储到utf8 char *。 我正在使用std :: wcstombs来执行此操作,并使用wchar_t *的长度作为最大长度。

我在utf编码的工作方式上有点模糊,但IIRC,单个字符可能会占用多个字节,在这种情况下我可能会丢失一些字符。

目前可能出现的字符非常有限,甚至可能适合ASCII字符集,但后来,我打算允许更多,例如öäõü等。 我会在那里遇到问题吗? 如果是这样,我将如何测量我需要分配的缓冲区的长度?

BMP中的代码点(“基本多语言平面”,即其值不大于0xFFFF的代码点)需要一个UTF-16代码单元或最多三个UTF-8代码单元。 在BMP之外,代码点需要两个UTF-16代码单元(代理对)或四个UTF-8代码单元。

如果你的wchar_t是两个字节(UTF-16),在最坏的情况下,UTF-8字符串可能需要三个字节用于单个wchar_t(即内存增加50%),并且4个字节用于代理对(即相同数量的记忆)。

但是,如果你的wchar_t是四个字节(UTF-32),非BMP字符只需要一个wchar_t,所以最坏的情况是每个wchar_t有四个字节,这是相同的内存量。

每个wchar_t只允许一个字节肯定会让你遇到麻烦。 只有在基本ASCII字符集之外没有字符时才能使用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM