diff --git a/pynfe/processamento/serializacao.py b/pynfe/processamento/serializacao.py index 0bd0221..ea4768e 100644 --- a/pynfe/processamento/serializacao.py +++ b/pynfe/processamento/serializacao.py @@ -6,7 +6,9 @@ except: from pynfe.entidades import Emitente, Cliente, Produto, Transportadora, NotaFiscal from pynfe.excecoes import NenhumObjetoEncontrado, MuitosObjetosEncontrados -from pynfe.utils import etree, so_numeros, obter_municipio_por_codigo, obter_pais_por_codigo, obter_municipio_e_codigo, formatar_decimal +from pynfe.utils import etree, so_numeros, obter_municipio_por_codigo, \ + obter_pais_por_codigo, obter_municipio_e_codigo, \ + formatar_decimal, safe_str from pynfe.utils.flags import CODIGOS_ESTADOS, VERSAO_PADRAO class Serializacao(object): @@ -550,7 +552,7 @@ class SerializacaoPipes(Serializacao): if retorna_string: try: - return '|'.join(map(str,serial_data)) + return '|'.join(map(safe_str, serial_data)) except TypeError as err: enum_args = '\n'.join( map( diff --git a/pynfe/utils/__init__.py b/pynfe/utils/__init__.py index 59f8de2..21ce8b6 100644 --- a/pynfe/utils/__init__.py +++ b/pynfe/utils/__init__.py @@ -130,4 +130,12 @@ def formatar_decimal(dec): if dec*100 - int(dec*100): return str(dec) else: - return "%.2f" % dec \ No newline at end of file + return "%.2f" % dec + +def safe_str(str_): + is not isinstance(str_, unicode): + if isinstance(str_, str): + str_ = str_.decode('utf8') + else: + str_ = unicode(str_) + return unicodedata.normalize('NFKD', str_).encode('ascii', 'ignore')