Ir para conteúdo
  • Cadastre-se

dev botao

json4delphi: Problema ao ler string com caracteres acentuados em notação Unicode


Ver Solução Respondido por Juliomar Marchetti,
  • Este tópico foi criado há 1567 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Postado

Boa noite.

Estou usando a jsons.pas, contida na pasta de Terceiros do ACBr, e me deparei com uma falha no tratamento de strings com caracteres com notação Unicode.

Recebi um json com a string abaixo:

   "produto_descricao":"M\u00e9dia 8 Peda\u00e7os"


   
Ao utilizar a classe TJson para ler este valor, o resultado obtido foi convertido para:

   JSon['produto_descricao'].AsString; // 'Mé#0dia 8 Pedaç#0os'

 

Ou seja, após os caracteres acentuados é inserido um byte 0, e ao atribuir para uma variável a string é truncada.

   sStr := JSon['produto_descricao'].AsString;   // 'Mé'

 

Consultei https://github.com/rilyu/json4delphi e verifiquei que existe uma versão mais recente, que corrige esta falha.
Baixei os fontes, fiz algumas adequações para o ACBr, compilei e testei com o Delphi 7 e Delphi XE6.

Estou disponibilizando em anexo os .pas atualizados da pasta ACBR\Fontes\Terceiros\json4delphi\src  para que sejam analisados e atualizados no repositório do ACBr.

Obrigado.
 

json4delphi-src.rar

  • Curtir 1
Postado
7 horas atrás, Juliomar Marchetti disse:

Precisei fazer alterações pois no Lazarus ocorreu problemas.

Favor atualizar e testar

Bom dia Juliomar.

Não uso o Lazarus, por isso não testei nele. Se alguém que usa o Lazarus puder testar, será bem-vindo.

Obrigado.

  • Moderadores
Postado
34 minutos atrás, Laercio Amici disse:

Bom dia Juliomar.

Não uso o Lazarus, por isso não testei nele. Se alguém que usa o Lazarus puder testar, será bem-vindo.

Obrigado.

Eu testei  e ficou ok. somente precisei mexer.

veja se o que mexi não interfere no delphi 7 ou outro

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Transparent-02.png
 

 

Postado
3 horas atrás, Juliomar Marchetti disse:

Eu testei  e ficou ok. somente precisei mexer.

veja se o que mexi não interfere no delphi 7 ou outro

Ok, testei no D7 e XE6. Funcionou sem problemas.

Obrigado.

  • Curtir 2
  • Moderadores
Postado

Certeza que tu testou no Delphi 7 com o instalador?

14 horas atrás, Laercio Amici disse:

Consultei https://github.com/rilyu/json4delphi e verifiquei que existe uma versão mais recente, que corrige esta falha.
Baixei os fontes, fiz algumas adequações para o ACBr, compilei e testei com o Delphi 7 e Delphi XE6.

olhe

 

 

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Transparent-02.png
 

 

Postado
15 minutos atrás, Juliomar Marchetti disse:

Certeza que tu testou no Delphi 7 com o instalador?

Sim, testei. No D7 funcionou perfeitamente, mas o @duardomribeiro usa o Delphi 2010, que não tenho aqui pra testar. O erro dele é o mesmo que eu estava tendo com o D7. Pesquisei no site da Embarcadero e havia encontrado referência ao record TFormatSettings a partir do Delphi 2009, e por isso incluí o {$IFDEF DELPHI2009_UP} na unit jsonsUtilsEx.pas.

Fiz uma nova busca, e encontrei este link, dizendo que a var FormatSettings  foi incluída no Delphi XE:
http://delphiprogrammingdiary.blogspot.com/2019/04/formatsettings-or-tformatsettings-in.html

Alterei a unit e troquei o ifdef anterior por {$IFDEF DELPHIXE_UP}, Compilei novamente com D7 e XE6, funcionou. Segue em anexo.

Desculpe pelo equívoco, não tenho outras versões do Delphi instaladas.

 

jsonsutilsEx.pas

  • Este tópico foi criado há 1567 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.
Visitante
Este tópico está agora fechado para novas respostas
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.