Página 1 de 2

Dúvida com Acentuação em Mysql

Enviado: 18 Mai 2022 17:25
por rossine
Olá,

Estou tentando subir dados acentuados através de JSON via CURL e não estou conseguindo

Código: Selecionar todos

   cJson   := hb_jsonEncode( { "Tema" => "Legislação de Trânsito" }, .F. )

   cJson   := hb_StrToUTF8( cJson )

   aadd( aHeader, "Content-Type: application/json; charset=utf-8" )

e Está gravando no BD assim:

Código: Selecionar todos

LegislaþÒo de TrÔnsito
Minha Tabela foi criada assim:

Código: Selecionar todos

 ENGINE=InnoDB DEFAULT CHARSET=utf8_general_ci;
Talvez sem UTF-8 ficasse mais fácil, como seria ?

Alguém saberia me dizer o que fazer ?

Dúvida com Acentuação em Mysql

Enviado: 19 Mai 2022 10:07
por Mario Mesquita
Bom dia.

Será que não falta essas declarações no seu programa?

Código: Selecionar todos

REQUEST HB_CODEPAGE_UTF8EX, HB_CODEPAGE_PT850, HB_CODEPAGE_PTISO, HB_LANG_PT
hb_cdpSelect( "UTF8EX" )
Saudações,
Mario.

Dúvida com Acentuação em Mysql

Enviado: 19 Mai 2022 17:02
por rossine
Olá Mário,

Primeiramente obrigado pela sugestão :)

Eu consegui resolver setando as configurações abaixo:

Código: Selecionar todos

   aMsg := { }

   aadd( aMsg, hHash )

   cJson   := hb_jsonEncode( aMsg, .F. )

   cJson   := hb_StrToUTF8( win_AnsiToOem( cJson ) )    // Sem isto a acentuação fica errada

   aHeader := { }

   aadd( aHeader, "Content-Type: application/json" )
   aadd( aHeader, "charset=utf-8" )  // Sem isto a acentuação fica errada
...
      curl_easy_setopt( hCurl, HB_CURLOPT_POSTFIELDS, cJson )

      curl_easy_setopt( hCurl, HB_CURLOPT_HTTPHEADER, aHeader )
...
Obrigado,

Dúvida com Acentuação em Mysql

Enviado: 19 Mai 2022 17:25
por JoséQuintas
Sei lá... cada um tem seu jeito...

O que fez foi modificar tudo pra mesma codepage, UTF-8.
Poderia remover tudo, e deixar em ANSI, desde que estivesse configurado igual em tudo.
Não sei pra que complicar com UTF-8.

Dúvida com Acentuação em Mysql

Enviado: 20 Mai 2022 09:06
por Mario Mesquita
Bom dia a todos.

Se entendi o que li, ele definiu a base de dados pra UTF-8. Aí obriga a salvar tudo assim.

Nos meus ensaios com MySql, criei as bases assim. Funciona mas realmente é chato pra caramba. A única vantagem aparente é se for usar essa base em serviço de internet. Pra intranet não vejo vantagem alguma, me corrijam se falei bobagem.

Saudações,
Mario.

Dúvida com Acentuação em Mysql

Enviado: 20 Mai 2022 14:45
por JoséQuintas
UTF-8 é para o mundo enxergar o mundo.

Sou brasileiro, meu aplicativo é brasileiro, e é usado por brasileiros.
Então... não faz sentido usar codepage diferente de pt-br.

Mesmo internet, não precisa ser UTF-8, mas tudo caminhou pra isso, pra padronizar.

Nada contra, exceto o fato de um caractere poder ser representado por vários caracteres, o que deixa tudo com tamanho variável, e é de se imaginar também mais lento.

Mas se é pra ficar usando funções de conversão.... mais fácil usar só quando mexer com UTF-8, e não o tempo todo.

http://www.jpatecnologia.com.br/

Meu site é em ASP, pt-br, usando banco de dados MySQL em pt-br.
Sei lá se fica errado em algum país fora do Brasil.

Dúvida com Acentuação em Mysql

Enviado: 20 Mai 2022 14:53
por JoséQuintas
Aproveitando...

Quando fui definir codepage para o aplicativo e banco de dados...
Na época ainda mexia alguma coisa em Visual Basic 6.

Comparei o VB6, o Harbour, o site, o MySQL, editor de textos, bloco de notas, editor do Visual Basic, etc. se tudo ficava igual, respeitando a codepage.
Quando tudo ficou igual, foi isso que adotei PT-ISO no Harbour.
Certo? Errado? Sei lá.... tá funcionando igualzinho em todos, não vejo porque considerar errado.

Dúvida com Acentuação em Mysql

Enviado: 20 Mai 2022 15:16
por Itamar M. Lins Jr.
Olá!
UTF-8 é para o mundo enxergar o mundo.
Não é apenas isso.
Tem SIMBOLOS LEGAIS! Aquelas CARINHAS... AVIÃOZINHO... rsrsrsrs

Saudações,
Itamar M. Lins Jr.

Dúvida com Acentuação em Mysql

Enviado: 20 Mai 2022 15:24
por Itamar M. Lins Jr.
Olá!
Se desejar colocar nos relatórios em HTML, tá na mão!
Imagem
Imagem
Imagem

Código: Selecionar todos

<html>
☻	☺ ☹	♀	♂ ✈ ☃	
</html>
Salvar como icons.html e abrir no navegador.
Captura de tela 2022-05-20 153834.png
Saudações,
Itamar M. Lins Jr.

Dúvida com Acentuação em Mysql

Enviado: 24 Mai 2022 17:15
por rossine
Olá,

Usando UTF-8 aqui não está 100%, então estou tentando usar o padrão Ansi mesmo.

Quando envio o comando:

Código: Selecionar todos

   hHash := { "Sql" => "INSERT INTO Temas ( ID_Tema, Descricao ) VALUES ( 'TEMA_0001', 'Legislação de Trânsito' )" }

   aMsg := { }

   aadd( aMsg, hHash )

   cJson   := hb_jsonEncode( aMsg, .F. )

//   cJson   := hb_StrToUTF8( win_AnsiToOem( cJson ) ) // Usando isto executa o comando dentro do PHP mas a acentuação fica errada

   aHeader := { }

   aadd( aHeader, "Content-Type: application/json" )
//   aadd( aHeader, "charset=latin1" )        tentei isto e não funcionou
//   aadd( aHeader, "charset=iso-8859-1" ) tentei isto e não funcionou

   hCurl := curl_easy_init()

   if !empty(hCurl)
      curl_easy_setopt( hCurl, HB_CURLOPT_VERBOSE, .F. )
      curl_easy_setopt( hCurl, HB_CURLOPT_CUSTOMREQUEST, "POST" )
      curl_easy_setopt( hCurl, HB_CURLOPT_POSTFIELDS, cJson )
...
na entrada do PHP, quando interpreta a linha de comando:

Código: Selecionar todos

 $parametros = json_decode( file_get_contents( "php://input" ) ) ;
ocorre o erro:

Código: Selecionar todos

INSERT INTO Temas ( ID_Tema, Descricao ) VALUES ( 'TEMA_0001', 'Legislação de Trânsito' )

Malformed UTF-8 characters, possibly incorrectly encoded\n"
O que pode estar errado ?

Meu arquivo index.php no servidor está definido assim:

Como estou iniciando o desenvolvimento em PHP, não sei se isto tem a ver.

Código: Selecionar todos

<head>
   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>

Dúvida com Acentuação em Mysql

Enviado: 24 Mai 2022 22:27
por JoséQuintas
A mensagem de erro do PHP é que os caracteres não estão em UTF-8.
Só pode significar que o PHP está configurado pra UTF-8, e o que está configurando é o HTML e não o PHP.

Dúvida com Acentuação em Mysql

Enviado: 25 Mai 2022 08:06
por Itamar M. Lins Jr.
Olá!
Malformed UTF-8 characters, possibly incorrectly encoded\n"

Código: Selecionar todos

<!DOCTYPE html>
<html>

<head>
<meta charset="UTF-8">
</head>

<body>
<h1>My Website</h1>
<p>Some text...</p>
</body>

</html>
O padrão acredito que seja UTF-8 no MySQL/MariaDb e no PHP. No HTML para os navegadores se não tiver nada(sem a tag meta charset) é UTF-8 em META CHARSET.

Seu EDITOR DEVERÁ estar em UTF-8 também.
Já fiz alguns testes com Harbour e os acentos precisam do UTF8EX(Extendido) como página de código.

Saudações,
Itamar M. Lins Jr.

Dúvida com Acentuação em Mysql

Enviado: 25 Mai 2022 15:08
por rossine
Olá,

O Problema ocorre na entrada da execução do programa em PHP:

Código: Selecionar todos

    $parametros = json_decode( file_get_contents( "php://input" ) )

    $cClasse  = $parametros[0]->cClasse;
    $cMetodo = $parametros[0]->cMetodo;
    $cSql       = $parametros[0]->cSql;
Quando eu envio um Hash que tenha algum elemento com acentuação:

Código: Selecionar todos


[ {"cTabela":"Temas","cOper":"POST","cSql":"INSERT INTO Temas ( ID_Tema, Descricao ) VALUES ( 'TEMA_0001', 'Legislação de Trânsito' )"}]

A variável "$parametros" não recebe nada, é aqui que está o problema, não sei porque.
Já salvei todos os arquivoos .php , .html no formato "uft8" e subi estes arquivos, mudei o index.php para

Código: Selecionar todos

<meta http-equiv="Content-Type" content="text/html; charset=utf8" />
...mas não vai, tem algo errado ainda.

O Hash passado para o programa quando não tem acentuação, funciona.

Mais alguma sugestão ?

Obs:
- Tentei refazer aqui com padrão "iso-8859-1" e "latin1" mas não vai também.
- Tentei também setando: HB_CDPSelect( "UTF8EX" ) e não dá certo.

Obrigado,

Dúvida com Acentuação em Mysql

Enviado: 25 Mai 2022 16:09
por rossine
Olá,

Na função hb_jsonEncode() tem como passar o CodePage:

Código: Selecionar todos

   cJson   := hb_jsonEncode( aMsg, .F., "UTF8EX" )
Nas definições dos parâmetros passados para a "Curl", faço assim:

Código: Selecionar todos

   aHeader := { }
...
   aadd( aHeader, "Content-Type: application/json" )
   aadd( aHeader, "charset=utf8" )
...
Passando este parâmetro "UTF8EX", não ocorre mais erros, mas a acentuação no Banco de Dados fica errada ainda:

Código: Selecionar todos


LegislaþÒo de TrÔnsito
SinalizaþÒo de TrÔnsito
DireþÒo Defensiva
Primeiros Socorros
Meio Ambiente e Cidadania
MecÔnica bßsica de VeÝculos


Dúvida com Acentuação em Mysql

Enviado: 25 Mai 2022 16:47
por Itamar M. Lins Jr.
Olá!
Passando este parâmetro "UTF8EX", não ocorre mais erros, mas a acentuação no Banco de Dados fica errada ainda:
Não está misturando as coisas ?

No HTML a tag META CHARSET="UTF-8"
No Harbour é ... Xô vê aqui...

Código: Selecionar todos

REQUEST HB_CODEPAGE_UTF8
Function Main
hb_cdpSelect( "UTF8EX" )
No Html colocar

Código: Selecionar todos

!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8"/>
No banco de dados, deve configurar ai p/ UTF-8.
https://codigofonte.org/configurando-pa ... -ou-mysql/
É do conhecimento comum que os padrões do MySQL foram escolhidos sob forte influência de drogas, é basicamente por isso que eles são tão aleatórios e ruins. MariaDB também herda principalmente esses, devido à compatibilidade com versões anteriores. Ou talvez, você sabe, porque usar drogas enquanto programando é simplesmente divertido.
Saudações,
Itamar M. Lins Jr.