2015-04-16 3 views
0

Какой набор символов является стандартным набором символов для NSString, когда я набираю содержимое из UITextField?NSString: работа с API на основе UTF8

Я разработал приложение, которое отправляет такие NSStrings в REST-API на основе UTF8. На бэкэнде есть MySQL-база данных на основе utf8, а также varchar-поля на основе utf8. Мой POST-запрос отправляет строковые данные из приложения iOS на сервер. И с помощью GET-Request я получаю эти строки из REST API.

В приложении все напечатано в порядке. Специальные символы UTF-8 - Персонажи, подобные ÄÖÜ, отображаются правильно после отправки их на сервер и после получения их обратно.

Но когда я вхожу в mysql-консоль сервера REST API и выполняю SELECT-команду при этих данных, там отображаются поврежденные символы.

Что может быть причиной? В каких наборах символов Apple использует NSString?

ответ

3

Похоже, что это проблема с сервером. Убедитесь, что версия, которую вы используете, поддерживает UTF-8, более старые версии этого не делают. См.: How to support full Unicode in MySQL database

Кодировка MySQL utf8 отличается от нужной кодировки UTF-8. Он не поддерживает полную поддержку Unicode.

В MySQL 5.5.3 (выпущен в начале 2010 года) введена новая кодировка utf8mb4, которая соответствует UTF-8 и, таким образом, полностью поддерживает Unicode.

NSString имеет внутреннее представление, которое по сути непрозрачно.

Метод UITextFieldtext возвращает NSString.

Если вы хотите, чтобы данные из строки использовали для отправки на сервер, используйте - (NSData *)dataUsingEncoding:(NSStringEncoding)encoding и укажите кодировку, такую ​​как NSUTF8StringEncoding.

NSData *textFieldUTF8Data = [textFieldInstance.text dataUsingEncoding: NSUTF8StringEncoding]; 
+0

utf8mb4, как следует из его названия, добавляет 4-байтовые символы utf8. Это происходит у нескольких китайских иероглифов, новых смайликов и нескольких других ситуаций. Если вы не используете ни одно из них, то utf8mb4 не имеет значения. –

+0

4-байтные символы UTF-8 - это больше, чем «несколько китайских иероглифов, некоторые новые смайлики». Большинство символов emoji находятся в плоскости-1 и требуют 4 байта для кодировки UTF-8, UTF-16 или UTF-32. Проблема заключается в том, что MySQL выделяет только 3 байта для своего нестандартного «utf8» и называет его так, как будто он поддерживает UTF-8- «bad MySQL». Это работало до тех пор, пока символы не были помещены в плоскость-1. UTF-8 - от одного до четырех байтов. Обратите внимание, что во многих случаях пользователь использует тот, кто использует emoji и другие символы plane-1, но не поддерживает их, является близоруким и ограничивает пользователей. – zaph

0

Если, «MySQL консоли», вы имеете в виду под DOS, как окно в Windows, то вам необходимо:

Команда «CHCP» управляет «кодовой страницы». chcp 65001 предоставляет utf8, но для него также требуется специальная кодировка. некоторые кодовые страницы Чтобы установить шрифт в окне консоли: Щелкните правой кнопкой мыши на заголовке окна → Свойства → Font → выбрать Lucida Console

Кроме того, скажите «консоль», что ваши байты UTF8 делая SET NAMES utf8mb4.

+0

Я работаю с MAC и подключен через SSH к серверному терминалу – delete

+0

Извините, я не знаю, является ли «терминал» уже утилитой utf8. И если это не так, как это сделать. Тем не менее вам нужно установить SET NAMES utf8mb4'. –

Смежные вопросы