Pregunta:
Fecha: 14-11-2017 04:08:00
(En Español)
Muestra signos ??????????? con el idioma ruso[No resuelta]
Tengo una base de datos de oracle que en los campos de mi tabla aparecen bien los caracteres rusos pero, al desplegarlos en la pagina de php, me aparecen puros signos de interrogacion ?????????? Ya realice muchas cosas pero no he logrado solucionarlo. Me pueden ayudar por favor. Gracias y Saludos. Votos: 0 - Respuestas: 10 - Vistas: 10 Compartir en: Google Facebook Twitter LinkedIn LinkRespuestas:
-
Fecha: 14-11-2017 05:44:03
<head> <meta charset="UTF-8">
o puedes utilizar utf8_encode desde php Votos: 1 - Link respuesta -
Fecha: 14-11-2017 09:23:28 Muchas gracias por tu respuesta Jorge, es lo primero que codifiqué el charset, pero aun asi no me funciona. Saludos. Votos: 0 - Link respuesta
-
Fecha: 14-11-2017 12:23:04 Hola
Seria bueno que nos publiques el codigo que utilizas para obtener los datos de la base de datos y el codigo para mostrar dichos datos, ademas algun ejemplo de algunas palabras con acentuación que tengas en la base de datos.
Saludos Votos: 0 - Link respuesta -
Fecha: 14-11-2017 16:19:19 Hola Alejandro:
UTF-8 soporta perfectamente la codificación del alfabeto latino (ISO 8859-1) como del alfabeto cirílico (ISO 8859-5) y otras diversas grafías unicode. UTF-8 (8-bit Unicode Transformation Format).
Comprobemos que los datos llegan a la página realmente en UTF-8.
En PHP podemos detectar la codificación de caracteres mediante mb_detect_encoding.
Y realizamos la prueba:
<?php // El valor de $str lo cambiaremos por el valor que arrastramos de la tabla $str = "?????? ???? ????????? ????"; echo mb_detect_encoding($str); ?>
Si el resultado no es UTF-8 (o tal vez esté limitado a ISO 8859-1 -Latin1-), tendremos que revisar el cotejamiento de la conexión al servidor de nuestra base de datos.
En local, lo estoy realizando en utf8_general_ci con resultados correctos en diversos lenguajes (ruso, griego, japones, ...).
Saludos. Votos: 0 - Link respuesta -
Fecha: 15-11-2017 04:04:04 Si no están llegando los datos correctamente como menciona Txema debes de agregarle el header en php para decodificar.
header('Content-Type: text/html; charset=utf-8');
Espero que te sirva de ayuda, saludos. Votos: 0 - Link respuesta -
Fecha: 15-11-2017 11:07:46 Podrias probar mb_convert_case()
ejemplo de uso:echo mb_convert_case($registro['detalle'], MB_CASE_TITLE, "UTF-8")
Votos: 0 - Link respuesta -
Fecha: 15-11-2017 15:48:55 Revisando el tema en otros foros, la solución con Mysqli la tientes en stackoverflow (Establecer conjunto de caracteres utilizando MySQLi)
Resumiendo, desde una solución inicial en Mysql (ya obsoleta)
mysql_query("SET NAMES 'utf8'"); mysql_query('SET CHARACTER SET utf8');
La solución ideal que presentan en Mysqli es
$mysqli->set_charset("utf8");
Y cito; "es suficiente, deje que el controlador mysqli db haga las cosas por usted."
Si observas, en la última entrada se orientan a mysqli_query($conn,"SET SESSION collation_connection ='utf8_unicode_ci'");
Esto es, el cotejamiento de la conexión al servidor de nuestra base de datos en utf8_general_ci, como te indicaba en mi entrada anterior. Votos: 0 - Link respuesta -
Fecha: 15-11-2017 18:27:23 tu problema es la codificación multibites de mysql
tu codificación debe pasar de utf8_general a utf8mb4
la explicación completa aquí Votos: 0 - Link respuesta -
Fecha: 15-11-2017 21:19:42 Lo expresado por Julio Capuano, siendo correcto y sin entrar en contradicción con su enlace, requiere una explicación que podemos leer en la documentación oficial
10.1.9.3 El conjunto de caracteres utf8mb4 (codificación Unicode UTF-8 de 4 bytes)
Y cito textualmente:
El conjunto de caracteres nombrado utf8 utiliza un máximo de tres bytes por carácter y contiene solo caracteres BMP. A partir de MySQL 5.5.3, el conjunto de caracteres utf8mb4 utiliza un máximo de cuatro bytes por carácter y es compatible con caracteres suplementarios:
Para un caracter BMP, utf8 y utf8mb4 tienen características de almacenamiento idénticas: mismos valores de código, misma codificación, misma longitud.
Para un carácter suplementario, utf8 no puede almacenar el carácter en absoluto, mientras que utf8mb4 requiere cuatro bytes para almacenarlo. Debido a que utf8 no puede almacenar el carácter en absoluto, no tiene caracteres adicionales en las columnas utf8 y no necesita preocuparse por la conversión de caracteres o la pérdida de datos al actualizar datos de utf8 versiones anteriores de MySQL.
utf8mb4 es un superconjunto de utf8, por lo que para una operación como la siguiente concatenación, el resultado tiene conjunto de caracteres utf8mb4 y la intercalación de utf8mb4_col
Consejo : Para ahorrar espacio con utf8mb4, use VARCHAR en lugar de CHAR. De lo contrario, MySQL debe reservar cuatro bytes para cada carácter en una CHAR CHARACTER SET utf8mb4 columna porque esa es la longitud máxima posible.
Fin de la cita.
Cabe decir que la codificación de caracteres ISO 8859 (del 1 al 16) es inferior a los 136.755 caracteres y símbolos que recoge hoy UNICODE, donde están incluidos, y pudiendo llegar con UTF-8 (cuatro bytes) a 1.048.575 posibles puntos de código para representar cualquier tipo de símbolo o letra de cualquier idioma. Votos: 0 - Link respuesta -
Fecha: 16-11-2017 15:55:16 Esa fue la única solución, migrar los datos a mySql. Gracias a todos Votos: 1 - Link respuesta
Para participar activamente de la comunidad primero debes autenticarte, ingresa al sistema.Iniciar Sesión
