我有文件由Excel for Mac 2011 VBA在Western(Mac OS Roman)导出,如下所示:

我没有成功地将Excel for Mac VBA直接导出到UTF-8,所以我想在将它们保存到MySQL之前用PHP转换这些文件,我正在使用这个命令:
$dataset[$k] = mb_convert_encoding($line, 'ASCII', 'UTF-8'); //not correctly converted
$dataset[$k] = mb_convert_encoding($line, 'ISO-8859-8', 'UTF-8'); //not correctly converted
$dataset[$k] = mb_convert_encoding($line, 'macintosh', 'UTF-8'); //unrecognized name
$dataset[$k] = mb_convert_encoding($line, 'Windows-1251', 'UTF-8'); //changes "schön" to "sch?n"
$dataset[$k] = mb_convert_encoding($line, 'Windows-1252', 'UTF-8'); //changes "schön" to "schšn"
Run Code Online (Sandbox Code Playgroud)
我从2008年找到了这个有效编码格式列表,但它们似乎都没有代表Western (Mac OS Roman).
* UCS-4
* UCS-4BE
* UCS-4LE
* UCS-2
* UCS-2BE
* UCS-2LE
* UTF-32
* UTF-32BE …Run Code Online (Sandbox Code Playgroud) 我从邮件服务器获取电子邮件并将邮件转换为UTF-8字符集并将其保存在DB中.要转换字符集我使用mb_convert_encoding但它无法转换 gb2312和ks_c_5601-1987.在谷歌搜索我发现,而不是gb2312我可以使用CP936和ks_c_5601-1987使用CP949.
按照上面的方法,它意味着在我的代码中维护一个单独的charset映射列表.有没有办法将编码名称规范化为PHP内部支持的名称,从而无需在本地维护任何映射?
DOMDocument 似乎将中文字符转换为代码,例如,
你的乱发将成为ä½ çš„ä¹±å‘
如何保留中文或其他外语,而不是将其转换为代码?
以下是我的简单测试,
$dom = new DOMDocument();
$dom->loadHTML($html);
Run Code Online (Sandbox Code Playgroud)
如果我在loadHTML()之前添加以下内容,
$html = mb_convert_encoding($html, "HTML-ENTITIES", "UTF-8");
Run Code Online (Sandbox Code Playgroud)
我明白了
你的乱发
Run Code Online (Sandbox Code Playgroud)
即使隐蔽的代码将显示为汉字,你的乱发仍然不是????我追求的......
我读过维基百科关于Windows-1252字符编码的文章。对于字节值<128的字符,它应该与ASCII/UTF-8相同。
这是有道理的:
php -r "var_export(mb_detect_encoding(\"\x92\", 'windows-1252', true));"
'Windows-1252'
正确检测到左弯撇号。
php -r "var_export(mb_detect_encoding(\"a\", 'windows-1252', true));"
false
啊?字母“a”不是Windows-1252吗?
我运行此程序的终端设置为 UTF-8。因此,这应该与字母“a”的 ASCII 字节序列相同。为了最小化变量,如果我指定正确的 Windows-1252字节序列:
php -r "var_export(mb_detect_encoding(\"\x61\", 'windows-1252', true));"
false
在这些情况下,更改“strict”参数(其文档非常无用)没有任何作用。
我想将 html 实体转换为 UTF-8,但mb_convert_encoding会破坏已经 UTF-8 编码的字符。正确的方法是什么?
$text = "äöü ä ö ü ß";
var_dump(mb_convert_encoding($text, 'UTF-8', 'HTML-ENTITIES'));
// string(24) "äöü ä ö ü ß"
Run Code Online (Sandbox Code Playgroud) 我正在编写默认返回 utf-8 格式文档的函数,如果您提供特殊参数,它将返回 utf-16le 格式的内容。我开始为这个函数编写单元测试,我不明白的是如何检查编码是“utf-8”还是“utf-16le”。我已经尝试过mb_detect_encoding,但即使在这段代码片段中它也会返回false:
$utf16Doc = mb_convert_encoding($doc, "utf-16le", "utf8");
$test = mb_detect_encoding($utf16Doc, "utf-16le");
var_dump($test);
Run Code Online (Sandbox Code Playgroud)
感谢任何如何在测试中检查编码是 utf-16le 而不是 utf-8 的想法。
我正在尝试使用substr($originalText,0,250); 从字符串中提取n个字符
;
第n个字符是一个破折号。因此,当我在记事本中查看时,最后一个字符为–。在我的编辑器Brackets中,我什至无法打开日志文件,因为它仅支持UTF-8编码。
我也无法在此字符串上运行json_encode。
但是,当我使用时substr($originalText,0,251),它可以正常工作。我可以打开日志文件,它显示一个破折号而不是â€。json_encode也可以正常工作。
我可以使用它mb_convert_encoding($mystring, "UTF-8", "Windows-1252")来规避问题,但是谁能告诉我为什么最后加上这些字符会导致错误?此外,在执行此操作时,我的日志文件在方括号中显示“ –”,这也令人困惑。
我的问题是,为什么在字符串的末尾加上破折号,而不是在其他任何地方(后跟其他字符)。
希望我的问题很清楚,否则我可以尝试进一步解释。
谢谢。