Jump to content
Sign in to follow this  
Helio13

Problema enconding

Recommended Posts

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))
 

Share this post


Link to post
Share on other 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.

  • Vote 1

Share this post


Link to post
Share on other 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

Edited by Helio13

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.