【问题标题】:Calc utf-8 string size in bytes?以字节为单位计算 utf-8 字符串大小?
【发布时间】:2012-03-19 05:02:22
【问题描述】:

我有一串utf8。

我需要知道它的大小。 (字节)

总是x2 吗? // 我的意思是乘以 2

是否有任何 .net 功能?

附言

我问这个问题是因为我最新的question ...我需要(在内存映射文件中)计算字符串的偏移量( utf8 )-来自另一个进程..

【问题讨论】:

  • "我有一串 utf8。" - 不在 .NET 中。您要么有一个字符串(即 UTF-16),要么有一个表示 UTF-8 编码字符串的字节数组。在后一种情况下,您可以使用Array.Length。
  • 对于“x2”的东西...你确定你没有使用 UTF-16 吗?
  • @Porges 是否每个字符都以 2 个字节表示 - 即使它来自 0..127 ascii 表?
  • @RoyiNamir:是的,UTF-16 就是这种情况。此外,有些字符需要 4 个字节而不是 2 个。您可以在 Wikipedia 上阅读有关 UTF-16 的更多信息:en.wikipedia.org/wiki/UTF-16

标签: c# string .net-4.0


【解决方案1】:

不,UTF-8 并不总是 x2,它会根据实际内容而变化。对于 ASCII 字符,它是 1 个字节,但对于较大的代码点值可以进入几个字节。你想要:

string s = // your string
int len = Encoding.UTF8.GetByteCount(s);

【讨论】:

  • 谢谢马克......(请看我的编辑 - 看看这是从哪里来的......以及我为什么要问它:))
  • @Royi 那么你可能想要使用接受 byte* 的重载,但这取决于具体的场景
  • @MarcGravell 抱歉,我似乎不明白你的意思......假设我有一个包含常规字符(0..127)和特殊字符的字符串。 ...类似这样的东西:string s = "abcאבג"; 现在 - 假设我想去内存中位置的末尾....我怎样才能计算 要偏移多少字节( mmf. ..) ?
  • @MarcGravell 应该Encoding.GetByteCount(str) 好吗?他知道怎么做吗?(我的场景......)
  • @Royi 在哪个内存中?除非您使用GetBytes(),否则它不会在任何地方 编码 - 您只有 UTF-16 代码点。它们总是每个字符 2 个字节。所以...2 * s.Length 字节。如果您稍后要编码,那么是的,GetByteCount 会告诉您要留下多少空间。
猜你喜欢
  • 2013-04-26
  • 2011-06-17
  • 1970-01-01
  • 2013-02-06
  • 1970-01-01
  • 2015-09-01
  • 2012-01-20
  • 2012-02-01
  • 2011-11-26
相关资源
最近更新 更多