我有一个包含世界国家/地区的大型文件,我根据各个国家/地区分成较小的文件。原始文件包含以下条目:
EE.04 Järvamaa
EE.05 Jõgevamaa
EE.07 Läänemaa
然而,当我提取并将其写入新文件时,文本变为:
EE.04 Järvamaa
EE.05 Jõgevamaa
EE.07 Läänemaa
要保存我的文件,我使用以下代码:
mb_detect_encoding($text, "UTF-8") == "UTF-8" ? : $text = utf8_encode($text);
$fp = fopen(MY_LOCATION,'wb');
fwrite($fp,$text);
fclose($fp);
我尝试使用和不使用utf8_encode()保存文件,似乎都不起作用。我如何保存原始编码(UTF8)?
谢谢!
答案 0 :(得分:4)
首先,不要依赖mb_detect_encoding
。除非有一堆特定于编码的实体(意味着在其他编码中无效的实体),否则找出编码是什么并不是很好。
尝试一起摆脱mb_detect_encoding
行。
哦,utf8_encode
将Latin-1
字符串转换为UTF-8
字符串(不是从任意字符集到UTF-8
,这是你真正想要的)...你想要iconv
,但是你需要知道源代码编码(因为你不能真正信任mb_detect_encoding
,你需要通过其他方式来解决它)。
或者您可以尝试使用iconv
空输入编码$str = iconv('', 'UTF-8', $str);
(可能有效也可能无效)...
答案 1 :(得分:1)
它不起作用。即使您使用utf8_encode($ theString),也不会创建UTF8文件。
正确答案与 UTF-8字节顺序标记有关。
这是为了解问题:
- http://en.wikipedia.org/wiki/Byte_order_mark
- http://unicode.org/faq/utf_bom.html
解决方案如下: 由于UTF-8字节顺序标记是'\ xef \ xbb \ xbf',我们应该将它添加到文档的标题中。
<?php
function writeStringToFile($file, $string){
$f=fopen($file, "wb");
$file="\xEF\xBB\xBF".$string; // utf8 bom
fputs($f, $string);
fclose($f);
}
?>
$ file可以是任何文本或xml ... $ string是您的UTF8编码字符串。
立即尝试,它将使用您的UTF8内容(字符串)编写UTF8编码文件。
writeStringToFile('test.xml', 'éèàç');
答案 2 :(得分:0)
也许您想在将htmlentities($text)
写入文件之前调用html_entity_decode($fetchedData)
并在输出之前调用{{1}}。它将与斯堪的纳维亚字母一起使用。
答案 3 :(得分:-1)
您可以按照以下方式执行此操作:
<?php
$s = "This is a string éèàç and it is in utf-8";
$f = fopen('myFile',"w");
fwrite($f, utf8_encode($s));
fclose($f);
?>
答案 4 :(得分:-1)
事实上,您的源文件似乎不是UTF-8。您可能想尝试使用您一直使用的相同方法,但使用不同的编码,例如UTF-16。