Dúvida com Acentuação em Mysql

Fórum sobre Banco de Dados e RDDs para Clipper/[x]Harbour.

Moderador: Moderadores

rossine
Usuário Nível 3
Usuário Nível 3
Mensagens: 325
Registrado em: 06 Ago 2007 09:57
Localização: Divinópolis-MG

Dúvida com Acentuação em Mysql

Mensagem 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 ?
Rossine.

Harbour 3.4, MingW / Msvc, QT, Qt5xhb, GtQtc, DbfCdx, MySql/MariaDB.
Avatar do usuário
Mario Mesquita
Usuário Nível 4
Usuário Nível 4
Mensagens: 613
Registrado em: 08 Dez 2009 13:47
Localização: Rio de Janeiro

Dúvida com Acentuação em Mysql

Mensagem 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.
rossine
Usuário Nível 3
Usuário Nível 3
Mensagens: 325
Registrado em: 06 Ago 2007 09:57
Localização: Divinópolis-MG

Dúvida com Acentuação em Mysql

Mensagem 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,
Rossine.

Harbour 3.4, MingW / Msvc, QT, Qt5xhb, GtQtc, DbfCdx, MySql/MariaDB.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Dúvida com Acentuação em Mysql

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Mario Mesquita
Usuário Nível 4
Usuário Nível 4
Mensagens: 613
Registrado em: 08 Dez 2009 13:47
Localização: Rio de Janeiro

Dúvida com Acentuação em Mysql

Mensagem 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.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Dúvida com Acentuação em Mysql

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Dúvida com Acentuação em Mysql

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Dúvida com Acentuação em Mysql

Mensagem 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.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Dúvida com Acentuação em Mysql

Mensagem 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.
Saudações,
Itamar M. Lins Jr.
rossine
Usuário Nível 3
Usuário Nível 3
Mensagens: 325
Registrado em: 06 Ago 2007 09:57
Localização: Divinópolis-MG

Dúvida com Acentuação em Mysql

Mensagem 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>
Rossine.

Harbour 3.4, MingW / Msvc, QT, Qt5xhb, GtQtc, DbfCdx, MySql/MariaDB.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Dúvida com Acentuação em Mysql

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Dúvida com Acentuação em Mysql

Mensagem 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.
Saudações,
Itamar M. Lins Jr.
rossine
Usuário Nível 3
Usuário Nível 3
Mensagens: 325
Registrado em: 06 Ago 2007 09:57
Localização: Divinópolis-MG

Dúvida com Acentuação em Mysql

Mensagem 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,
Rossine.

Harbour 3.4, MingW / Msvc, QT, Qt5xhb, GtQtc, DbfCdx, MySql/MariaDB.
rossine
Usuário Nível 3
Usuário Nível 3
Mensagens: 325
Registrado em: 06 Ago 2007 09:57
Localização: Divinópolis-MG

Dúvida com Acentuação em Mysql

Mensagem 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

Rossine.

Harbour 3.4, MingW / Msvc, QT, Qt5xhb, GtQtc, DbfCdx, MySql/MariaDB.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Dúvida com Acentuação em Mysql

Mensagem 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.
Saudações,
Itamar M. Lins Jr.
Responder