私は壊れた韓国語の文字列を持っています。 これをutf-8文字列として復元します。PHP回復が壊れた英語以外の文字列(iso 8859-1)をutf-8として
$str = '"3234", "ºÎ»êÀü´ÜÁö ¹èÆ÷»ç¿ø ¸ðÁý. 2¿ù6ÀϺÎÅÍ ¤ý»ó¼¼³»¿ëÈ®ÀÎ", "2017-03-02 11:12:34';
上記の文字列はフルストリングの一部であり、ファイル内にあります。 ファイルはutf-8で保存され、壊れていない(韓国語)文字もあります。 壊れた文字列はごくわずかです。
お試しください。 mb_convert_encoding、iconvは動作しません。
print_r(mb_detect_encoding($str));
result : UTF-8
のでは2 を試してみて文字列を分割し、それを一つずつ変換してみました。
$result = preg_split('//u', $str, -1, PREG_SPLIT_NO_EMPTY);
var_dump($result);
result :
array(52) {
[0]=>
string(2) "º"
[1]=>
string(2) "Î"
[2]=>
string(2) "»"
[3]=>
string(2) "ê"
[4]=>
string(2) "À"
[5]=>
......
私は何が起こっているか見当がつかない3. を試してみてください。だから私は逆にもう一度試しました。文字列上記
は、実際に「부산전단지배포사원모집。2월6일부터ㆍ상세내용확인」 (私はオンライン変換サイト上でそれを回復した。サイトのアドレスやその他の情報は、この記事の一番下にある)
です私はそれぞれの2つの壊れた文字が1つの正しい文字を作り出していると考えました。だから私は各壊れた文字とターゲット(正しい)文字の16進コードをチェックアウトした。いくつかの計算を行った。
$str = 'ºÎ'; //부
$var = preg_split('//u', $str, -1, PREG_SPLIT_NO_EMPTY);
var_dump($var);
$tmp_str = ''; $result = '';
for($i = 0; $i < count($var); $i++)
{
if(($i+1)%2 == 1) {
$tmp_str .= dechex(_uniord($var[$i]));
} else {
$tmp_str .= dechex(_uniord($var[$i]));
$uni2 = dechex(hexdec($tmp_str) + hexdec('EAFBB2'));
$result .= hexToStr($uni2);
$tmp_str = '';
}
}
echo $result;
result : 부
しかし、それは "副"だけで働いた。 EAFBB2の代わりに各韓国語文字に別の16進数を追加する必要があります。
は
new String(XXX.getBytes(8859_1), "euc-kr")
が私の目的のためによく働くようで、JAVAで4
を試してみてください。私はJAVAを知らない。 http://egloos.zum.com/ndba/v/2831611
は、JavaのGetBytesメソッドに相当してみました。5. を試してみてください。それは非常に困難でした。壊れた文字はそれぞれ2バイトです。 2つの壊れた文字が正しいものになります。しかし、正しい文字は3バイトです(恐らくutf-8であるため)
つまり、2 + 2 => 3とする必要がありますか?
$str = 'ºÎ'; //부
for($i = 0; $i < strlen($str); $i++){
$bytes[] = ord($str[$i]);
}
print_r($bytes);
Array
(
[0] => 194
[1] => 186
[2] => 195
[3] => 142
)
$str = '부'; //부
for($i = 0; $i < strlen($str); $i++){
$bytes[] = ord($str[$i]);
}
print_r($bytes);
Array
(
[0] => 235
[1] => 182
[2] => 128
)
私を助けてください。私には多くの壊れた弦があり、それらを回復する必要があります。
オンライン変換サイト(http://string-functions.com/encodedecode.aspx)ここで、
を言った、あなたは1つのエンコーディングでテキストファイルをエンコードし、別のエンコーディングでテキストをデコードした場合に何が起こるかをシミュレートすることができます。試してみてくださいuto-8でスウェーデン文字åäöをエンコードし、次にiso-8859-1でデコードしたり、明伯(簡体字中国語で「理解する」という意味)をutf-8でエンコードして、GB 18030でデコードします。文字:鏄庝集、私は本当に理解できません。
これは私が望むものであり、このサイトの回復は私の壊れた弦を非常によく回復します。 (iso-8859-1からeuc-krまで)ですが、私はのphpで同じ処理をしたいと思います。
私はいくつかの情報を逃しました。実際には文字列は文字列の一部です。完全な文字列はこのようなものです。ファイルはutf-8で保存され、壊れていない破損文字は通常のutf-8韓国文字が含まれています。 "13440"、 "0c9e940c3bb84"、 "58ad32cd5bedf3d1c5"、 ""、 "{" p ":" 761596 "、" name ":"úμîÇÐ "í°øºÎºÁ½½ÇºÐ"、 "type": " "、" referrer ":" https://search.naver.com/search.naver?where=webkr&sm=tab_jum&ie=utf8&query=%EC%B4%88%EB%93%B1%ED%95%99%EC% 83%9D%EA%B3%B5%EB%B6%80 "、" site_id ":" "}"、 "2017-03-10 08:06:39" –
多くの作業のように聞こえます。文字セットの問題を避けるために、質問のサンプルファイルへのリンクを追加することができます。誰も助けてくれるとは思わない。 – miken32
http://pastebin.com/fkeBs1xLこれは私のファイルのサンプルです。元のファイルを公開することはできません。ごめんなさい。 –