我有两个unicode选项,看起来很有希望用于mysql数据库.
utf8_general_ci unicode (multilingual), case-insensitive
utf8_unicode_ci unicode (multilingual), case-insensitive
Run Code Online (Sandbox Code Playgroud)
你能解释一下utf8_general_ci和utf8_unicode_ci有什么区别吗?在设计数据库时,选择其中一个会产生什么影响?
我试图使用UTF-8并遇到麻烦.
我尝试了很多东西; 这是我得到的结果:
????而不是亚洲人物.即使是欧洲文本,我也得到Se?or了Señor.Señor或新浪新闻为????.Sefor Señor.我究竟做错了什么?我该如何修复代码?我可以恢复数据,如果是,如何恢复?
我目前正在开发一个项目,而不是使用常规的MySQL查询,我认为我会继续学习如何使用PDO.
我有一个名为参赛者的桌子,数据库,桌子和所有栏目都在utf-8中.我在参赛者表中有十个参赛作品,他们的专栏"名称"包含åäö等人物.
现在,当我从数据库中获取一个条目,并且var_dump名称时,我得到一个好结果,一个包含所有特殊字符的字符串.但我需要做的是按字符分割字符串,将它们放入一个我随后洗牌的数组中.
例如,我有这个字符串: 测试ÅÄÖTåän
当我运行str_split时,我会在数组中获取它自己的键中的每个字符.唯一的问题是所有特殊字符都显示为: ,表示数组将如下所示:
Array
(
[0] => T
[1] => e
[2] => s
[3] => t
[4] =>
[5] => ?
[6] => ?
[7] => ?
[8] => ?
[9] => ?
[10] => ?
[11] =>
[12] => T
[13] => ?
[14] => ?
[15] => ?
[16] => ?
[17] => n
)
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,它不仅会弄乱角色,而且还会在str_split进程中复制它们.我已经尝试了几种方法来分割字符串,但它们都有相同的问题.当我在分割之前输出字符串时,它会显示特殊字符.
这是我的dbConn.php代码:
//需要配置文件:require_once('config.inc.php');
// Start PDO connection:
$dbHandle = new PDO("mysql:host=$dbHost;dbname=$dbName;charset=utf-8", $dbUser, $dbPass);
$dbHandle -> exec("SET CHARACTER SET …Run Code Online (Sandbox Code Playgroud) 我有一个数据库填充了像♥•â—♥ Dhaka ♥•â—♥(应该是?•?? Dhaka ?•??)的值,因为我没有在创建数据库时指定排序规则.
现在我想解决它.我无法从第一个地方获取数据再次获取数据.所以我在想是否有可能在php脚本中获取数据并将其转换为正确的字符.
我已将数据库和字段的排序规则更改为utf8_general_ci..
我负责的是给我正确编码(和或损坏)字符串外部Web服务(UTF-8)是最有可能无论是ISO LATIN或WINDOWS-1252,但现在UTF-8(和或混合物ISO/WINDOWS/UTF-8).可爱的帽子(Â)比比皆是.
我显然无法修复外部Web服务如何存储其字符串以便丢失信息.因此,我所知道的100%翻译的希望是不可能的.
但我希望有人用Java编写了一个启发式字符映射库(不太可能有人会输入A帽子).
如果没有,我想我可以移植这个家伙PHP代码:https://stackoverflow.com/a/3521340/318174
更新和说明:像@VGR这样的简单转换将无效.我没有原始字节.数据在端点处转换不正确(SOAP服务器可能getBytes(/*with out correct encoding*/)已完成,或者数据可能以不正确的格式存储).当您将字节转换为Java中的字符串时,除非编码在任何地方都相同,否则不会保留数据.如果您想到像ASCII< - > 这样的东西,这很容易理解UTF-8.使用Windows-1252或ISO Latin更复杂,因为数据不会丢失,但经常会混淆.那是因为那些编码可以是两个字节而不是它的子集UTF-8.
如果您不相信我,您可以尝试getBytes()使用各种编码进行反复操作,并且会看到数据损坏和数据丢失.
在我的应用程序中,我读取了一个csv文件并向用户显示内容.但编码存在问题.
我有两个csv文件example1.csv和example2.csv.我在notepad ++中都打开了,它显示了example1的ANSI编码和不带BOM的UTF-8.
首先,我尝试使用mb_detect_encoding函数来检测编码,但在两种情况下都显示UTF-8,这是不正确的.
其次,我尝试使用utf8_encode将文件内容转换为UTF-8 .这适用于ANSI文件.但是对于没有BOM文件的UTF-8,似乎它被编码回ANSI.它显示Ã而不是德国ß.其他特殊字符也一样.
我希望在显示或处理内容之前确保内容始终采用UTF-8格式.那么我做错了什么吗?
这是我使用mb_detect_encoding函数的方式:
$file_content = file_get_contents($_FILES['file']['tmp_name']);
die(var_dump( mb_detect_encoding($file_content)));
Run Code Online (Sandbox Code Playgroud)
并为两个例子打印UTF-8.
我有一个webapp,可以在MySQL数据库中存储法语文本 - 可能包含重音字符.当通过PHP直接检索数据时,重音字符变成gibbirish.例如:qui r?fl?te la liste.
因此,我使用htmlentities()(或htmlspecialchars())将字符串转换为html实体,一切都很好.但是,当我输出包含重音字符和HTML元素的数据时,事情变得更加复杂.例如,<strong>被转换为<strong>浏览器并因此不被浏览器理解.
如何才能同时正确显示重音字符并正确解析我的HTML?
谢谢!