Почему я использовал бы Марка порядка байтов (BOM) Подписи Unicode?

Создайте свойство на следующем view controller .h и определите геттер и сеттер.

Добавить это property в NextVC.h на nextVC

@property (strong, nonatomic) NSString *indexNumber;

Добавить

@synthesize indexNumber; в NextVC.m

И последний

NextVC *vc=[[NextVC alloc]init];

vc.indexNumber=@"123";

[self.navigationController vc animated:YES];
8
задан Pup 25 June 2009 в 08:06
поделиться

6 ответов

Они необходимы в некоторых случаях, да, потому что существуют реализации UTF-16 как с прямым, так и с прямым порядком байтов.

При чтении неизвестного файла UTF-16, как вы можете сказать, какой из двух используется? Единственное решение - разместить в файле какой-то легко идентифицируемый маркер, который нельзя спутать ни с чем другим, независимо от используемого порядка байтов.

Это то, что делает спецификация.

И нужен ли он вам. ? Только если вы: 1) используете кодировку UTF, где порядок байтов является проблемой (это имеет значение для UTF-16, но UTF8 всегда выглядит одинаково независимо от порядка байтов), и файл будет совместно использоваться внешние приложения.

Если ваше собственное приложение - единственное, которое будет читать и записывать файл, вы можете опустить спецификацию и просто решить раз и навсегда, какой порядок байтов вы собираетесь использовать. Но если другое приложение должно прочитать файл, оно не будет знать заранее порядок байтов, поэтому добавление спецификации может быть хорошей идеей.

17
ответ дан 3 November 2019 в 13:10
поделиться

Спецификация указывает, в какой кодировке Unicode находится файл. Без этого различия читатель Unicode не знал бы, как читать файл.

Однако UTF-8 не требует спецификация.

Ознакомьтесь со статьей Википедии .

3
ответ дан 3 November 2019 в 13:10
поделиться

Некоторые выдержки из UTF и BOM FAQ Консорциума Unicode могут быть полезны.

Q: Что такое BOM?

A: Метка порядка байтов (BOM) состоит из кода символа U + FEFF в начале потока данных , где ее можно использовать в качестве подписи, определяющей порядок байтов и форму кодирования, в первую очередь, для файлов с открытым текстом без меток. . В некоторых протоколах более высокого уровня использование спецификации может быть обязательным (или запрещенным) в потоке данных Unicode, определенном в этом протоколе. (Подчеркну мой.)

Я бы не сказал, что метка порядка байтов встроена в данные. Скорее, он префикс данных. Символ - это только отметка порядка байтов, когда он является первым в потоке данных. Где-нибудь еще, и это ' s неразрывное пространство нулевой ширины . Программы с поддержкой Unicode, которые не соблюдают метку порядка байтов, в любом случае не пострадают от ее присутствия, поскольку символ невидим, а средство объединения слов в начале блока текста просто присоединяет следующий символ к нулю, так что это не имеет никакого эффекта.

Q: Где можно использовать спецификацию?

A: Спецификация полезна в начале файлов, которые вводятся как текст, но для которых неизвестно, являются ли они в формате big или little endian - он также может служить подсказкой, указывающей, что файл находится в Unicode, а не в устаревшей кодировке, и, кроме того, он действует как подпись для конкретной используемой формы кодирования.

Итак, вы Мне нужна спецификация, если ваша программа способна обрабатывать несколько кодировок Unicode. Как еще ваша программа узнает, какую кодировку использовать при интерпретации входных данных?

Q: Когда используется спецификация, используется ли она только в 16-битном тексте Unicode?

A: Нет, спецификация может быть используется в качестве подписи независимо от того, как преобразовывается текст Unicode: UTF-16, UTF-8, UTF-7 и т. д. Точные байты, составляющие спецификацию, будут такими, какие символы Unicode U + FEFF преобразованы в этом формате преобразования. В этой форме спецификация служит для обозначения как того, что это файл Unicode, так и того, в каком из форматов он находится.

Это, вероятно, тот случай, когда сегодня BOM используется наиболее часто. Он отличает текст в кодировке UTF-8 от любых других кодировок; на самом деле он не указывает порядок байтов, поскольку UTF-8 имеет только один порядок.

Если вы разрабатываете свой собственный протокол или формат данных, вам не требуется использовать спецификацию. Другой вопрос из FAQ касается этого:

Q: Как мне пометить данные, которые не интерпретируют U + FEFF как спецификацию?

A: Используйте тег UTF-16BE, чтобы указать UTF с прямым порядком байтов. -16 текст и UTF-16LE для обозначения текста UTF-16 с прямым порядком байтов. Если вы все же используете спецификацию, пометьте текст просто как UTF-16.

В нем упоминается концепция тегирования формата ваших данных. Это означает указание формата вне диапазона из самих данных. Замечательно, если такая возможность доступна вам, но часто это не так, особенно когда старые системы модернизируются для Unicode.

Если вы все же используете спецификацию, пометьте текст просто как UTF-16.

В нем упоминается концепция тегирования формата ваших данных. Это означает указание формата вне диапазона из самих данных. Замечательно, если такая возможность доступна вам, но часто это не так, особенно когда старые системы модернизируются для Unicode.

Если вы все же используете спецификацию, пометьте текст просто как UTF-16.

В нем упоминается концепция тегирования формата ваших данных. Это означает указание формата вне диапазона из самих данных. Замечательно, если такая возможность доступна вам, но часто это не так, особенно когда старые системы модернизируются для Unicode.

9
ответ дан 3 November 2019 в 13:10
поделиться

Поскольку вы отметили это с помощью UTF-8, я скажу, что вам не нужна спецификация. Метки порядка байтов полезны только для UTF-16 и UTF-32, поскольку они информируют компьютер о том, находится ли файл в Big Endian или Little Endian . Некоторые текстовые редакторы могут использовать метку порядка байтов, чтобы решить, какую кодировку использует документ, но это не является частью стандарта Unicode.

2
ответ дан 3 November 2019 в 13:10
поделиться

UTF16 и UTF32 могут быть записаны как в форме Big-Endian, так и в Little-Endian. Вы можете попробовать эвристически определить порядок байтов, проанализировав результат обработки файла в любом порядке, но чтобы избавить вас от лишних хлопот, спецификация может сказать вам сразу.

UTF-8 на самом деле не нуждается в спецификации, хотя , поскольку вы декодируете его побайтно.

0
ответ дан 3 November 2019 в 13:10
поделиться

«Спецификация» - это пережиток первых дней Unicode, когда предполагалось, что использование Unicode будет означать использование 16-битных символов. Это совершенно бессмысленно в такой кодировке, как UTF-8, которая имеет только один порядок байтов. Выбор U + FEFF также субоптимален для UTF-32, потому что он не может различать все возможные байтовые порядки от среднего до конца (для этого потребуется спецификация, закодированная с 4 разными байтами).

Единственная причина, по которой вы бы использовали его, - это отправка данных UTF-16 или UTF-32 между платформами с разным порядком байтов, но (1) большинство людей все равно используют UTF-8 и (2) MIME Параметр charset обеспечивает лучший механизм.

2
ответ дан 3 November 2019 в 13:10
поделиться