Сбор комментариев в форму ответа:
Судя по комментариям к вопросу, очевидно, что исходные файлы не кодируются в UTF-8. Конвертация в UTF-8 или использование кодировки UTF-8 напрямую, похоже, работает.
Использование кодировки UTF-8 напрямую:
strcpy(sql,"insert into blog (title) values ('\xE5\x91\xB5\xE5\x91\xB5')");
Вы можете избежать преобразования всех ваших исходных файлов в UTF-8, выполнив что-то вроде этого:
sprintf(sql, "insert into blog (title) values('%s')", AnsiToUtf8("呵呵"));
К сожалению, функция AnsiToUtf8()
будет зависеть от платформы.
Если посмотреть дальше, то похоже, что Visual Studio сохраняет исходные файлы в кодировке по умолчанию для ваших настроек языкового стандарта Windows. Исходя из этого, может существовать целый ряд кодировок, если компьютеры вашей группы разработчиков настроены на разные локали.
Я думаю, было бы довольно сложно, если не невозможно, реализовать функцию AnsiToUtf8()
, которая бы справлялась во всех возможных случаях, особенно если учесть, что языковые настройки компьютера, на котором разрабатывается код, могут не соответствовать так же, как компьютер, который в конечном итоге выполняет код.
Я думаю, что самым чистым способом решения этой проблемы было бы равномерное использование кодировки UTF-8 в исходных файлах, при условии, что вы хотите использовать кодовые точки в строковых литералах вне областей, где кодировка по умолчанию и Unicode перекрываются.
Другим способом было бы интернационализировать код, чтобы исходные файлы не содержали расширенных символов, и использовать что-то вроде GNU gettext или подобное для обработки переводов.