Calc utf-8 размер строки в байтах?

18

У меня есть строка utf8 .

Мне нужно получить его размер. (байты)

Всегда ли оно x2 ? // Я имею в виду умножить на 2

есть ли какая-либо функция .net для этого?

p.s.

im задает этот вопрос из-за моего последнего вопроса ... Мне нужно (в файле mempry mapped) вычитать смещение строки (utf8) - из другого процесса.

    
задан Royi Namir 18.03.2012 в 21:05
источник
  • «У меня есть строка utf8». - не в .NET. У вас либо есть строка (это UTF-16), либо у вас есть массив байтов, который представляет собой кодированную строку UTF-8. В последнем случае вы можете просто использовать Array.Length. –  porges 18.03.2012 в 21:13
  • С "x2" вещь ... Вы уверены, что не используете UTF-16? –  Marc Gravell♦ 18.03.2012 в 21:15
  • @Porges делает каждый символ представлен в 2 байтах - даже если его из 0..127 таблицы ascii? –  Royi Namir 29.05.2012 в 23:06
  • @RoyiNamir: да, это относится к UTF-16. Кроме того, некоторые символы потребуют 4 байта вместо двух. Вы можете больше узнать о UTF-16 в Википедии: en.wikipedia.org/wiki/UTF-16 –  porges 30.05.2012 в 00:24

1 ответ

43

Нет, это не всегда x2 для UTF-8 и изменения, основанные на фактическом содержимом. Для символов ASCII это 1 байт, но для больших значений кодовой точки может использоваться несколько байтов. Вы хотите:

string s = // your string
int len = Encoding.UTF8.GetByteCount(s);
    
ответ дан Marc Gravell 18.03.2012 в 21:08
источник
  • спасибо marc ...... (пожалуйста, посмотрите мое редактирование - чтобы узнать, откуда это взялось ... и почему я спросил его :)) –  Royi Namir 18.03.2012 в 21:21
  • @ Royi, тогда вы можете использовать перегрузки, принимающие байты *, но это зависит от точного сценария –  Marc Gravell♦ 18.03.2012 в 21:23
  • @MarcGravell извините, кажется, что я не понимаю вас ... скажем, у меня есть строка, которая содержит регулярные символы (0..127) и специальные символы. ... что-то вроде этого: string s="abc אבג"; теперь - скажем, я хочу пойти в конец местоположения В ПАМЯТИ .... как я могу вычислить, сколько байтов для смещения (mmf ...)? –  Royi Namir 29.05.2012 в 22:58
  • @MarcGravell должен Encoding.GetByteCount (str) в порядке? знает ли он, как это сделать (мой сценарий ...) –  Royi Namir 29.05.2012 в 23:04
  • @Royi, в котором память? если вы не используете GetBytes (), он не закодирован нигде - у вас есть только коды кода UTF-16. И они всегда 2 байта на символ. Итак ... 2 * s.Length байты. Если вы собираетесь кодировать позже, тогда да GetByteCount расскажет вам, сколько места уйти. –  Marc Gravell♦ 29.05.2012 в 23:35
Показать остальные комментарии