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