Iconv将UTF-8转换为Windows-1250无法正常工作。

12

我一直在使用iconv时遇到问题。现在我必须将字符串转换为Windows-1250,但似乎无法正常工作:

$string = "ľaľa ho papľuha, ogrcal mi krpce!";
echo $string . ' ( ' . mb_detect_encoding($string) . ' ) <br>';
$string_encoded = iconv( mb_detect_encoding( $string ), 'Windows-1250//TRANSLIT', $string );
echo $string_encoded . ' ( ' . mb_detect_encoding($string_encoded) . ' ) <br>';
$string_encoded = mb_convert_encoding( $string, 'Windows-1250' );
echo $string_encoded . ' ( ' . mb_detect_encoding($string_encoded) . ' ) <br>';

上面的三个echo输出的内容正是这样:

ľaľa ho papľuha, ogrcal mi krpce! ( UTF-8 )
�a�a ho pap�uha, ogrcal mi krpce! ( ) 
mb_convert_encoding() Unknown encoding &quot;Windows-1250&quot; ( ASCII )

我一直看到这些菱形问号,很怀疑这个PHP函数是否起作用。如何将UTF-8转换为Windows-1250?

  • 文件是在Notepad+中以UTF-8格式保存的。
  • 我还尝试过header('Content-Type: text/html; charset=windows-1250');setLocale()
4个回答

10
我曾经遇到过类似的问题。当读取CSV文件时,“Česká republika”这个单词被读成了“Èeská republika”。
以下方法帮助我解决了这个问题:
iconv( "Windows-1250", "UTF-8", ($string));

是的,这对我也有效。我的错误是将源编码和目标顺序颠倒了。 - Michal - wereda-net

6

1
是的,你是正确的。编码被发送为windows-1250,但浏览器没有正确显示它。 - ononononon

2

虽然这是一篇老文章,但你可以将UTF-8转换为Windows-1252,从而达到相同的效果:

$str = "ľaľa ho papľuha, ogrcal mi krpce!"
$str = mb_convert_encoding( $str, "Windows-1252", "UTF-8" );

但是,如果您真的需要Windows-1250编码,您可以使用这个解决方案并根据您的需求进行适应。


1
很棒的$str例子 :D - Tonoslav

1

正确答案是iconv( "UTF-8", "Windows-1250", $string );


1
你应该对你想要纠正的答案进行评论或建议性编辑,而不是发布一个新的答案。 - Das_Geek
@Das_Geek 我们不建议编辑以提供更正确的答案。这样的编辑通常会被拒绝。相反,请提供另一种解决方案。在这种情况下,我认为Pavel提供了一个更好的答案,这是完全可以接受的,它是否正确是另一回事。 - Dharman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接