Как изменить кодировку строк как utf 8 в C

#python #c #encoding

#python #c #кодирование

Вопрос:

Как я могу изменить кодировку символов строки на UTF-8? Я выполняю несколько вызовов execv в программе python, но python возвращает строки с некоторыми сокращенными символами. Я не знаю, проблема ли это с python или c, но я подумал, что если я смогу изменить кодировку строк на c, а затем передать ее в python, это должно сработать. Итак, как я могу это сделать?

Спасибо.

Комментарии:

1. Покажите нам какой-нибудь код и скажите, используете ли вы Python 2 или Python 3.

2. Как вы получаете эти строки обратно? Вы пытались преобразовать их из python, как описано там: docs.python.org/howto/unicode.html . Также на какой платформе вы работаете, и что вы используете для печати строк?

Ответ №1:

C как язык не облегчает кодирование строк. Строка C — это просто последовательность символов, заканчивающаяся нулем (8-разрядные целые числа со знаком в большинстве систем).

Широкая строка (с символами типа wchar_t , обычно 16-разрядными целыми числами) также может использоваться для хранения больших символьных значений; однако, опять же, функции стандартной библиотеки C и типы данных никоим образом не осведомлены о какой-либо концепции кодирования строк.

Ответ на ваш вопрос заключается в том, чтобы убедиться, что строки, которые вы передаете в Python, кодируются как UTF-8.

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

Ответ №2:

В C. Нет такого понятия, как кодировка символов.

char* Может содержать любые данные, то, как вы интерпретируете символы, зависит от вас. Например, printf обычно выводит символы такими, какие они есть, в стандартный вывод, и если ваша консоль интерпретирует эти символы как UFT8, они будут отображаться как таковые.

Если вы хотите конвертировать между различными кодировками на стороне C, вы можете взглянуть на ICU.

Если вы хотите конвертировать между кодировками на стороне Python, посмотрите на http://docs.python.org/howto/unicode.html.

Комментарии:

1. @nightcracker: технически это определено реализацией.