У меня была такая же проблема, после копания в течение нескольких часов и, наконец, нашел этот ответ , который работает для меня
Если вы используете rails в качестве сервера, это все, что вам нужно сделать. Не нужно ничего делать в ios / xcode, просто передайте NSString, не выполняя какие-либо операции кодирования UTF8 / 16, на сервер.
Postegre правильно хранит код, просто когда вы отправляете ответ json обратно на клиент ios, при условии, что вы выполняете рендеринг json: @message, возникает проблема с кодировкой json.
Вы можете проверить, есть ли у вас проблемы с кодировкой json на вашей консоли rails, выполнив простой тест на вашей консоли.
test = {"smiley" => "u {1f604}"}
test.to_json
если он напечатает "{\" smiley \ ": \" \ uf604 \ "}" (обратите внимание, что 1 потеряно), то у вас есть эта проблема. и патч по ссылке это исправит.