У меня проблема с символами unicode, которые немного перепутаны. У меня есть файл конфигурации, который поставляет мне переменную location
. Файл конфигурации имеет # -*- coding utf-8 -*-
вверху, но file -bi config-file-name
сообщает мне, что кодировка us-ascii
и независимо от того, что я делаю (включая iconv
и recode
(linux)), он отказывается это изменить.Я теряю символы Unicode где-то (Python3)
В любом случае, я извлекаю некоторые данные с символами unicode в них (передается как input_data
ниже), и данные выглядят отлично, когда я смотрю на него напрямую. Однако, где-то в следующем жую его:
def make_message(input_data):
messagestring = ''
if isinstance(input_data, list):
messagestring = '\n'.join(input_data)
elif isinstance(input_data, dict):
for key, val in input_data.items():
messagestring += key + '\n'
if isinstance(val, dict):
for newkey, newval in val.items():
messagestring += newkey + ' ' + newval + '\n'
else:
messagestring += val + '\n'
return messagestring
Позже, я называю это следующим образом:
weather_msg = location + '\n' + make_message(message)
Я понял, что кодировка моего файла конфигурации (где «место» приходит from) заставляет всю строку превращаться в ascii, но это всего лишь предположение, и в моем googling я не могу понять, так ли это должно работать.
Я пробовал кучу вещей, в том числе пытаясь кодировать location
, и я много кодировал кодировку для Google, но я не могу вернуть своих символов в Юникоде, и я не могу понять, где я жую их.
Может ли кто-нибудь увидеть явную ошибку, которую я делаю где-то, что заставляет мои данные юникода в ascii? В качестве альтернативы, я мог бы написать все это в файл, а затем отправить по электронной почте, если это более разумный способ сделать это, и если это решит мои проблемы с кодировкой. Информация была достаточно короткой, что я просто ее хранил в памяти, но я открыт для того, чтобы сказать, что это глупый способ сделать что-то.
Спасибо за чтение и за любые предложения.
Вы не показали нам код открывающий чем, читает и записывает файл конфигурации , где и звучит, как проблема. – abarnert
Кроме того, при выходе из этой функции 'messagestring' должен быть' str' (что означает Unicode). Что вы видите, что заставляет вас думать, что это не так? – abarnert
Я написал файл конфигурации. Я еще не закодировал часть, которая ее создает. Кроме того, то, что вы упомянули о messagestring, я думал, должно быть верно, но я получаю текст, похожий на этот «Air Temp 66.4» (прямоугольник вопросительный знак) (прямоугольник вопросительный знак) ' – erewok