我正在从各种RSS提要中读取很多文本,并将其插入到数据库中。
当然,提要中使用了几种不同的字符编码,例如UTF-8和ISO 8859-1。
不幸的是,文本的编码有时会出现问题。例:
“Fußball”中的“ß”在我的数据库中应如下所示:“Ÿ”。如果它是“”,则正确显示。
有时,“Fußball”中的“ß”在我的数据库中看起来像这样:“ß”。然后,当然会显示错误。
在其他情况下,“ß”另存为“ß”-因此无需进行任何更改。然后它也会显示错误。
我该如何避免情况2和情况3?
如何使所有内容都使用相同的编码,最好是UTF-8?什么时候必须使用utf8_encode()
,什么时候必须使用utf8_decode()
(很清楚效果是什么,但是什么时候必须使用这些函数?),什么时候我什么都不要做?
如何使所有内容都具有相同的编码?也许具有功能mb_detect_encoding()
?我可以为此编写函数吗?所以我的问题是:
这样的功能会起作用吗?
function correct_encoding($text) {
$current_encoding = mb_detect_encoding($text, 'auto');
$text = iconv($current_encoding, 'UTF-8', $text);
return $text;
}
我已经测试过了,但是没有用。它出什么问题了?
如果应用utf8_encode()
到已经存在的UTF-8字符串,它将返回乱码的UTF-8输出。
我做了一个解决所有这些问题的功能。叫做Encoding::toUTF8()
。
您不需要知道字符串的编码是什么。它可以是Latin1(ISO8859-1),Windows-1252或UTF-8,或者字符串可以混合使用。Encoding::toUTF8()
会将所有内容转换为UTF-8。
我之所以这样做,是因为某项服务使我的数据馈送全乱了,在同一字符串中混合了UTF-8和Latin1。
用法:
require_once('Encoding.php');
use \ForceUTF8\Encoding; // It's namespaced now.
$utf8_string = Encoding::toUTF8($utf8_or_latin1_or_mixed_string);
$latin1_string = Encoding::toLatin1($utf8_or_latin1_or_mixed_string);
下载:
https://github.com/neitanod/forceutf8
我提供了另一个函数,Encoding::fixUFT8()
它将修复每个看起来乱码的UTF-8字符串。
用法:
require_once('Encoding.php');
use \ForceUTF8\Encoding; // It's namespaced now.
$utf8_string = Encoding::fixUTF8($garbled_utf8_string);
例子:
echo Encoding::fixUTF8("Fédération Camerounaise de Football");
echo Encoding::fixUTF8("Fédération Camerounaise de Football");
echo Encoding::fixUTF8("FÃÂédÃÂération Camerounaise de Football");
echo Encoding::fixUTF8("Fédération Camerounaise de Football");
将输出:
Fédération Camerounaise de Football
Fédération Camerounaise de Football
Fédération Camerounaise de Football
Fédération Camerounaise de Football
我已将函数(forceUTF8
)转换为称为的类上的一系列静态函数Encoding
。新功能是Encoding::toUTF8()
。
我有一个用ISO-8859-1编码的项目(一个我不能改变的历史性选择)。 我设置我的IDE,IntelliJ 14.1.1终极,在ISO-8859-1无处不在:我的编码设置 (我的代码在ISO-8859-1中指定的文件夹中) 编码。xml看起来不错: 我的idea没有在git上提交,因为它不是标准的IDE。 但当我处理某个文件时,intelliJ会在保存时不断将编码切换到UTF-8。我多次将文件转
我有一个编码问题。 我有数百万个文本文件需要为语言数据科学项目进行解析。每个文本文件都编码为UTF-8,但我刚刚发现其中一些源文件的编码不正确。 例如我有一个中文文本文件,编码为UTF-8,但文件中的文本如下所示: 当我使用Python检测此中文文本文件的编码时: Chardet告诉我文件编码为UTF-8: UnicodeDammit还告诉我该文件编码为UTF-8: 同时,我知道这不是UTF-8,
问题内容: 我将承担将数据库从Latin1转换为UTF-8的繁琐而棘手的任务。 在这一点上,我只想检查存储在表中的数据类型,因为这将确定我应使用哪种方法转换数据。 具体来说,我想检查Latin1列中是否有UTF-8字符,什么是最好的方法?如果只影响几行,那么我可以手动修复它。 选项1.执行MySQL转储并使用Perl搜索UTF-8字符吗? 选项2。使用MySQL CHAR_LENGTH查找具有多字
问题内容: 我想从请求中获取参数(带有重音符的字符),但是它不起作用。我尝试使用,但也没有用。 我知道返回正确的字符,但不起作用! 有人有主意吗? 问题答案: Paul的建议似乎是最好的做法,但如果要解决此问题,则根本不需要URLEncoder或URLDecoder: 更新: 由于获得了很多选票,我想强调BalusC的观点,即这绝对不是解决方案。充其量是一种解决方法。人们不应该这样做。 我不知道是
问题内容: 我正在用python做一些脚本。我创建一个保存在文件中的字符串。这个字符串有很多数据,来自目录的树状结构和文件名。根据convmv的介绍,我所有的树状结构都是UTF-8。 我想将所有内容都保留在UTF-8中,因为之后我将其保存在MySQL中。现在,在UTF-8的MySQL中,我遇到了一些字符问题(例如é或è-我是法语)。 我希望python始终将字符串用作UTF-8。我在互联网上阅读了
这是我第一次用MSSQLServer作为数据库为我的项目实现Liquibase(3.8.1版)。 我正在尝试为现有的sql server数据库设置基线,该数据库包含许多表、视图、存储过程和函数。 我成功地为表格生成了Angelog。 由于我所做的有很多存储过程、视图和函数,所以我从MSSQLSERVER生成了SQL脚本- 在使用liquibase update执行上述更改日志时,我收到错误“运行l