2010-06-29 17 views

Respuesta

6

A)
Sí. Todos los caracteres representados en Unicode tienen un índice numérico único llamado codepoint.

Si conoce el rango de los puntos de código para chino simplificado y sabe cómo obtener el punto de código unicode de un carácter dado, una comparación simple le dirá si el carácter dado se encuentra dentro del rango de chino simplificado.

una pregunta existente tiene una solución para conseguir el punto de código Unicode para un personaje en PHP:
How to get code point number for a given character in a utf-8 string?

En Java, el java.lang estática. Character::codePointAt() método le dará lo que necesita.

B)
la conversión de un carácter chino simplificado, o una cadena, a Pinyin muy probablemente requerirá alguna forma de mapa con el punto de código Unicode como la clave y el pinyin como el valor correspondiente.

Un ejemplo de esto en PHP se muestra en http://kingphp.com/108.html.

Una simple búsqueda en Google de [pinyin java] revela una gama de opciones, dos de los cuales son chinos a las bibliotecas en pinyin http://kiang.org/jordan/software/pinyinime/ y http://pinyin4j.sourceforge.net/.

+0

Gracias por todo eso, lo tomaré desde aquí;) estaba buscando en Google pinyin php y los resultados no fueron tan buenos, sin embargo solo agregué la etiqueta java porque recién comencé a aprender, así que no pensé en googlearla. – Moak

+0

el código de kingphp.com está un poco gastado, ¿podrías considerar volver a publicar un enlace? – think123

+0

@ think123: No estoy seguro de lo que quieres decir con eso. Publiqué un enlace a un ejemplo para demostrar que se puede lograr lo que se necesita lograr. El enlace todavía muestra esto. –

0

Si está utilizando UTF-8 para interpretar los archivos y las llamadas a la base de datos, supongo que un simple

$new_text = preg_replace(array('/你好/',...), array('nǐhǎo',...), $old_text); 

debe hacer el truco.

¿De dónde sacas el hilo?

+0

lo siento si no estaba claro, necesito el pinyin de cualquier carácter chino. En este caso para traducir nombres. – Moak

4

Poco tarde, pero resuelto!

<?php 

function curl($url,$params = array(),$is_coockie_set = false) 
{ 

if(!$is_coockie_set){ 
/* STEP 1. let¡¯s create a cookie file */ 
$ckfile = tempnam ("/tmp", "CURLCOOKIE"); 

/* STEP 2. visit the homepage to set the cookie properly */ 
$ch = curl_init ($url); 
curl_setopt ($ch, CURLOPT_COOKIEJAR, $ckfile); 
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true); 
$output = curl_exec ($ch); 
} 

$str = ''; $str_arr= array(); 
foreach($params as $key => $value) 
{ 
$str_arr[] = urlencode($key)."=".urlencode($value); 
} 
if(!empty($str_arr)) 
$str = '?'.implode('&',$str_arr); 

/* STEP 3. visit cookiepage.php */ 

$Url = $url.$str; 

$ch = curl_init ($Url); 
curl_setopt ($ch, CURLOPT_COOKIEFILE, $ckfile); 
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true); 

$output = curl_exec ($ch); 
return $output; 
} 

function Translate($word,$from,$to) 
{ 
$word = urlencode($word); 
$url = 'http://translate.google.com/translate_a/t?client=t&text='.$word.'&hl=' . $from . '&sl=' . $from . '&tl=' . $to . '&ie=UTF-8&oe=UTF-8&multires=1&otf=2&pc=1&ssel=0&tsel=0&sc=1'; 

$name_en = curl($url); 
$name_en = explode('"',$name_en); 
return $name_en[1]; 
} 
function pinyin($word) 
{ 
$word = urlencode($word); 
$url = 'http://translate.google.com/translate_a/t?client=t&text='.$word.'&hl=zh&sl=zh&tl=zh&ie=UTF-8&oe=UTF-8&multires=1&otf=2&pc=1&ssel=0&tsel=0&sc=1'; 

$name_en = curl($url); 
$name_en = explode('"',$name_en); 
return str_replace(" ", "", strtolower($name_en[5])); 
} 
?> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 
</head> 
<body> 
<?php 
echo pinyin(urldecode($_GET['phrase'])); 
?> 
</body> 
</html> 

si se pone esto en http://www.example.com/foo.php, el tipo de http://www.example.com/foo.php?phrase=你好, y se le dará el pinyin.

Probado y funciona.

Cuestiones relacionadas