Ir para o conteúdo
Helio13

Problema enconding

Mensagens Recomendadas

Helio13

Estou com um problema na minha aplicação que não estou a conseguir resolver, que é o seguinte:

Tenho na minha aplicação a opção de introduzir na bd dados a partir de um ficheiro csv, é parte está ok, o problema é que os dados do csv vêm em utf-8 e eu comparo com dados que vou buscar ao mongodb que vêm em latin ou iso, não sei bem.

Eu vou buscar os generos dos filmes e guardo para depois comparar se já existe o genero do filme ou não para depois inserir.

Mas quando os que vou buscar ao mongo estao assim: Com\\xe9dia

E os que vêm no csv estao assim: Com\\xc3\\xa9dia

Isto para o genero Comédia.

Como consigo resolver este problema?

O meu código está aqui:

def csv_upload(request):
if request.method == 'POST':
	gen = Genre.objects.all()
	genres = dict(Genre.objects.all().values_list('GenreType', 'id'))
	print genres
	for obj in gen:
		genres[obj.GenreType] = obj.id

	file = request.FILES['file']  
	dialect = csv_mod.Sniffer().sniff(codecs.EncodedFile(file,"utf-8").read(1024))
	file.open()
	csv = csv_mod.DictReader( codecs.EncodedFile(file,"utf-8"), dialect=dialect )
	for line in csv:			  
		report = Movie()

		genall = line["IdGenre"].split(',')
		print genall
		movieGenres = []

		for cc in genall:
			if not cc in genres:
				rep = Genre()
				rep.GenreType = cc
				rep.save()

				genres[rep.GenreType] = rep.id;
			movieGenres.append(genres[cc])

		report.MovieTitle = line["MovieTitle"]
		report.IdGenre = movieGenres
		report.MovieYear = line["MovieYear"]
		report.MovieDuration = line["MovieDuration"]
		report.save()
return render_to_response('index.html', {},
						  context_instance=RequestContext(request))
 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Pedro C.

Suponho que tens várias soluções possíveis. Ou fazes o teu próprio parser:

In [6]: a = 'Comédia'
In [7]: a
Out[7]: 'Com\xc3\xa9dia'
In [8]: a.replace('\xc3\xa9','\xe9')
Out[8]: 'Com\xe9dia'

Ou utilizas módulos de Python para fazer conversões. Aparentemente o codecs dá para fazer isso: http://docs.python.org/release/2.5.2/lib/module-codecs.html

Um exemplo é: http://stackoverflow.com/questions/191359/how-to-convert-a-file-to-utf-8-in-python

Ou então utilizas mesmo o encode e decode nas funções de strings do Python mas nesse caso terás de saber para o que é que vais converter.

  • Voto 1

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Helio13

Digamos que a 1ª opção não, porque não é apenas "Comédia", são todas as palavras com acentos ou por exemplo ç

Agora, ainda não consegui perceber como fazer o que preciso no meu código :/

Afinal, consegui agora resolver o problema.

Utilizei o encode do Python.

Obrigado pela ajuda Pedro

Cumprimentos

Editado por Helio13

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.