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:
Minha Tabela foi criada assim:
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!
Salvar como icons.html e abrir no navegador.
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:
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
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.