时间戳转换器

编码俄语字母时的有缺陷的字符

日期:2023-02-24     浏览:130    
【中文标题】编码俄语字母时的有缺陷的字符【英文标题】:Flawed characters when encoding Russian letters 【发布时间】:2012-08-02 16:33:53 【问题描述】:

我正在向服务器查询一些信息(以 JSON 形式返回),尤其是名称列表,其中一个名称返回包含奇怪的字符:

Ðемања МатеÑ~ић

应该是这样的:

Немања Матејић

我尝试了以下方法:

从字符串中删除 BOM(字节顺序标记)(否则 PHP 不会解码 JSON),然后使用 json_decode 对其进行解码,并直接获取名称并将其插入到我的 UTF8 编码的 MySQL 数据库中。 使用带有 UTF8 排序规则的字段。

...无济于事 - 数据库中的值仍然存在缺陷。

如何解决?

编辑:

运行SHOW VARIABLES LIKE '%character%' 返回

character_set_client    utf8
character_set_connection    utf8
character_set_database  utf8
character_set_filesystem    binary
character_set_results   utf8
character_set_server    latin1
character_set_system    utf8
character_sets_dir  /data/mysql/fuentez/share/mysql/charsets/

可能是因为 character_set_server 是 latin1 吗?

【问题讨论】:

数据库内部编码是一回事,但你还需要设置适当的连接编码,你会从那里找到你的方法:***.com/questions/2159434/set-names-utf8-in-mysql Немања Матејић 不是俄语,它包含非西里尔字符,如 њ、ј、ћ 【参考方案1】:

这可能是一种方便的使用俄罗斯符号的 json 格式:

新的 json_decode 函数

    <?php
    function json_encode_my($value) 
    
        if (is_int($value)) 
            return (string)$value;   
         elseif (is_string($value)) 
            $value = str_replace(array('\\', '/', '"', "\r", "\n", "\b", "\f", "\t"), 
                                 array('\\\\', '\/', '\"', '\r', '\n', '\b', '\f', '\t'), $value);
            $convmap = array(0x80, 0xFFFF, 0, 0xFFFF);
            $result = "";
            for ($i = mb_strlen($value) - 1; $i >= 0; $i--) 
                $mb_char = mb_substr($value, $i, 1);
                if (mb_ereg("&#(\\d+);", mb_encode_numericentity($mb_char, $convmap, "UTF-8"), $match)) 
                    $result = sprintf("\\u%04x", $match[1]) . $result;
                 else 
                    $result = $mb_char . $result;
                
            
            return '"' . $result . '"';                
         elseif (is_float($value)) 
            return str_replace(",", ".", $value);         
         elseif (is_null($value)) 
            return 'null';
         elseif (is_bool($value)) 
            return $value ? 'true' : 'false';
         elseif (is_array($value)) 
            $with_keys = false;
            $n = count($value);
            for ($i = 0, reset($value); $i < $n; $i++, next($value)) 
                        if (key($value) !== $i) 
                  $with_keys = true;
                  break;
                        
            
         elseif (is_object($value)) 
            $with_keys = true;
         else 
            return '';
        
        $result = array();
        if ($with_keys) 
            foreach ($value as $key => $v) 
                $result[] = json_encode((string)$key) . ':' . json_encode($v);    
            
            return '' . implode(',', $result) . '';                
         else 
            foreach ($value as $key => $v) 
                $result[] = json_encode($v);    
            
            return '[' . implode(',', $result) . ']';
        


?>

【讨论】:

【参考方案2】:

您将数据库中的数据存储为 latin1 而不是 UTF-8。

例如,编码为 latin1 的字符串 е 变为 0xd0 0xb5,这是西里尔字母 е 的 UTF-8 编码。

【讨论】:

插入时需要将连接上的编码设置为UTF-8。您使用的是什么数据库库?你能发布你的插入代码吗? @SteffanLong:也许这对你有帮助? ***.com/questions/4475548/… 谢谢,将它添加到我的 PDO 初始化中就可以了!

相关文章

2021-3-1日报博客(代码片段)

{个人博客1.学到的东西Python3基础语法编码默认情况下,Python3源码文件以UTF-8编码,所有字符串都是unicode字符串。当然你也可以为源码文件指定不同的编码:#-*-coding:cp-1252-*-上述定义允许在源文件中使用Windows-1252字符集中的字符...}

按俄语字母顺序对 UITableView 进行排序

{】按俄语字母顺序对UITableView进行排序【英文标题】:SortUITableViewinRussianalphabeticalorder【发布时间】:2010-11-0220:31:15【问题描述】:我是菜鸟,我很抱歉,因为这个问题真的很愚蠢。我有一个NSArray,其中包含俄语NSDictionaries中UITab...}

我在 Visual Studio 2008 中看不到俄语字母

{】我在VisualStudio2008中看不到俄语字母【英文标题】:Ican\'tseetherussianalphabetinVisualStudio2008【发布时间】:2012-08-0306:51:08【问题描述】:我正在尝试在VisualStudio2008中输出俄语单词。我写道:#include<iostream>#include<locale.h>usingn...}

有没有办法匹配任何 Unicode 字母字符?

{...他们也正确地有一堆非英语,但仍然是字母字符,如é和俄语字符等......有没有办法}

如何将西里尔字符与正则表达式匹配

{...2-1513:18:34【问题描述】:如何使用正则表达式匹配法语和俄语西里尔字母字符?我只想做字母字符,没有数字或特殊字符。现在我有[A-Za-z]【问题讨论】:看这个问题:Regexandunicode这里是:[А-Яа-я]@AlexErygin仅限俄语字符:[}

如何将具有Unicode编码的字符串转换为字母字符串

{】如何将具有Unicode编码的字符串转换为字母字符串【英文标题】:HowtoconvertastringwithUnicodeencodingtoastringofletters【发布时间】:2012-06-2403:09:41【问题描述】:我有一个带有转义的Unicode字符\\uXXXX的字符串,我想将它转换为常规的Unic...}

在字符串中编码斯堪的纳维亚字母的有效方法

{】在字符串中编码斯堪的纳维亚字母的有效方法【英文标题】:Efficientwaytoencodescandinavianlettersinastring【发布时间】:2011-08-2802:42:30【问题描述】:我的JavaScript从服务器获取字符串值:varname=VALUE_FROM_SERVER;这个name将显示在网页上...}

字符编码

{...nge,美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是现今最通用的单字节编码系统,并等同于国际标准ISO/IEC646。由于计算机是美国人发明的,因此,最早只有127个字...}

字符编码中asciiunicode和utf-8的区别

{最早只有127个字母被编码到计算机里,也就是大小写英文字母、数字和一些符号,这个编码表被称为ASCII编码,比如大写字母A的编码是65,小写字母z的编码是122。但是要处理中文显然一个字节是不够的,至少需要两个字节,而且...}

当对短网址使用唯一的字母数字字符串时,将创建的字符串存储在数据库中还是即时编码/解码更好?

{...数字字符串时,将创建的字符串存储在数据库中还是即时编码/解码更好?【英文标题】:Whenusingauniquealphanumericstringforashorturl,isitbettertostorethecreatedstringinthedatabaseorencode/decodeonthefly?【发布时间】:2010-02-2203:10:35【问题描述】:我...}

Copyright ©2021 时间戳转换器 小常识 114pp | 陕ICP备18005036号