将ISO-8859-2转换为UTF-8(波兰语字符)


Convert ISO-8859-2 to UTF-8 (Polish characters)

我正在尝试解析一个XML文件(http://jstryczek.blox.pl/rss2)表示其字符集为ISO-8859-2。我的数据库是UTF-8,所以我想把它转换成UTF-8。

为此,我在字符串上运行以下操作:

$content = iconv('ISO-8859-2', 'UTF-8//TRANSLIT', $content);

出于某种原因,我得到了一个奇怪的编码,所以:

Gdzie są różnice

显示为:

Gdzie sÄ róşnice

有没有解释为什么波兰角色没有出现?UTF-8不支持它们吗?

我通过将字符串更改为JSON,然后将所有抛光特殊符号替换为HTML代码来解决此问题。我在下面添加我的结果:

        $specialChars = [
        ''u0105', # ą
        ''u0107', # ć
        ''u0119', # ę
        ''u0142', # ł
        ''u0144', # ń
        ''u00f3', # ó
        ''u015b', # ś
        ''u017a', # ź
        ''u017c', # ż
        ''u0104', # Ą
        ''u0106', # Ć
        ''u0118', # Ę
        ''u0141', # Ł
        ''u0143', # Ń
        ''u00d3', # Ó
        ''u015a', # Ś
        ''u0179', # Ż
        ''u017b', # Ż
    ];
    $polishHtmlCodes = [
        'ą', # ą
        'ć', # ć
        'ę', # ę
        'ł', # ł
        'ń', # ń
        'ó', # ó
        'ś', # ś
        'ź', # ź
        'ż', # ż
        'Ą', # Ą
        'Ć', # Ć
        'Ę', # Ę
        'Ł', # Ł
        'Ń', # Ń
        'Ó', # Ó
        'Ś', # Ś
        'Ź', # Ż
        'Ż', # Ż
    ];
    $result = str_replace($specialChars, $polishHtmlCodes, json_encode($string));
    var_dump(json_decode($result));
// prints
// e.g. 'Różowe okulary'

看起来,这个文本已经在utf-8中编码了,所以没有必要对它进行解码。当我将这个文件保存到utf-8并运行它时:

<?php
$content = 'Gdzie są różnice';
$content = iconv('ISO-8859-2', 'UTF-8//TRANSLIT', $content);
print $content;

我得到了这个:

Gdzie sÄ róşnice

这正是错误的文本,你明白了。

只需按原样保存文本,它已经是utf-8了。

<?php
$content = 'Gdzie są różnice';
$content = mb_convert_encoding($content, "ISO-8859-2", "UTF-8");
print $content;
?>