php将unicode编码转为utf-8方法

介绍

在前端开发中,为了让中文在不同的环境下都能很好的显示,一般是将中文转化为unicode格式,即\u4f60,比如:”你好啊”的unicode编码为”\u4f60\u597d\u554a”。

JS里将中文转为unicode编码很简单。

functionconvert2Unicode(str) {
    returnstr.replace(/[\u0080-\uffff]/g,
    function($0) {
        vartmp = $0.charCodeAt(0).toString(16);
        return"\u" + newArray(5 - tmp.length).join('0') + tmp;
    });
}

反转也很简单,直接alert出来或者innerHTML到dom节点里都可以。

但如果将\u4f60\u597d\u554a”字符传递给php,php就不能直接echo或者其他操作了。直接echo的话还是原生的字符,不能自动转化为中文。

php将unicode转为utf-8方法

在php5.0及以上版本中提供了json_encode, json_decode方法。在使用json_encode变量的时候,如果变量里含有中文的话,会将中文转为unicode格式。所以在想是否可以通过json_decode将unicode转为中文呢?实际测试发现是可以的,但对单一的字符串发现有些问题。

对于简单的字符串,发现有时候使用json_decode转的化,结果直接为空了。但将字符串替换为数组然后在转就可以了。下面就有了下面封装的代码。

functionunicode2utf8($str){
        if(!$str)return$str;
        $decode= json_decode($str);
        if($decode)return$decode;
        $str= '["'. $str. '"]';
        $decode= json_decode($str);
        if(count($decode) == 1){
                return$decode[0];
        }
        return$str;
}


使用这个方法可以很好的将unicode编码转为utf-8编码。

附上js转为实体字符和php将实体字符转为汉字的方法

js将汉字转为实体字符:

functionconvert2Entity(str) {
    varlen = str.length;
    varre = [];
    for(vari = 0; i < len; i++) {      varcode = str.charCodeAt(i);       if(code > 256) {
            re.push('&#'+ code + ';');
        }else{
            re.push(str.charAt(i));
        }
    }
    returnre.join('');
}

php将实体字符转为utf-8汉字的方法:

functionentity2utf8onechar($unicode_c){
    $unicode_c_val= intval($unicode_c);
    $f=0x80;// 10000000
    $str= "";
    // U-00000000 - U-0000007F:   0xxxxxxx
    if($unicode_c_val<= 0x7F){      $str= chr($unicode_c_val);     }   //U-00000080 - U-000007FF:  110xxxxx 10xxxxxx   else if($unicode_c_val >= 0x80 && $unicode_c_val <= 0x7FF){       $h=0xC0; // 11000000        $c1 = $unicode_c_val >> 6 | $h;
        $c2= ($unicode_c_val& 0x3F) | $f;
        $str= chr($c1).chr($c2);
    }
    //U-00000800 - U-0000FFFF:  1110xxxx 10xxxxxx 10xxxxxx
    elseif($unicode_c_val>= 0x800 && $unicode_c_val<= 0xFFFF){         $h=0xE0;// 11100000        $c1 = $unicode_c_val >> 12 | $h;
        $c2= (($unicode_c_val& 0xFC0) >> 6) | $f;
        $c3= ($unicode_c_val& 0x3F) | $f;
        $str=chr($c1).chr($c2).chr($c3);
    }
    //U-00010000 - U-001FFFFF:  11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
    elseif($unicode_c_val>= 0x10000 && $unicode_c_val<= 0x1FFFFF){         $h=0xF0;// 11110000        $c1 = $unicode_c_val >> 18 | $h;
        $c2= (($unicode_c_val& 0x3F000) >>12) | $f;
        $c3= (($unicode_c_val& 0xFC0) >>6) | $f;
        $c4= ($unicode_c_val& 0x3F) | $f;
        $str= chr($c1).chr($c2).chr($c3).chr($c4);
    }
    //U-00200000 - U-03FFFFFF:  111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
    elseif($unicode_c_val>= 0x200000 && $unicode_c_val<= 0x3FFFFFF){       $h=0xF8;// 11111000        $c1 = $unicode_c_val >> 24 | $h;
        $c2= (($unicode_c_val& 0xFC0000)>>18) | $f;
        $c3= (($unicode_c_val& 0x3F000) >>12) | $f;
        $c4= (($unicode_c_val& 0xFC0) >>6) | $f;
        $c5= ($unicode_c_val& 0x3F) | $f;
        $str= chr($c1).chr($c2).chr($c3).chr($c4).chr($c5);
    }
    //U-04000000 - U-7FFFFFFF:  1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
    elseif($unicode_c_val>= 0x4000000 && $unicode_c_val<= 0x7FFFFFFF){         $h=0xFC;// 11111100        $c1 = $unicode_c_val >> 30 | $h;
        $c2= (($unicode_c_val& 0x3F000000)>>24) | $f;
        $c3= (($unicode_c_val& 0xFC0000)>>18) | $f;
        $c4= (($unicode_c_val& 0x3F000) >>12) | $f;
        $c5= (($unicode_c_val& 0xFC0) >>6) | $f;
        $c6= ($unicode_c_val& 0x3F) | $f;
        $str= chr($c1).chr($c2).chr($c3).chr($c4).chr($c5).chr($c6);
    }
    return$str;
}
functionentities2utf8($unicode_c){
    $unicode_c= preg_replace("/\&\#([\da-f]{5})\;/es","entity2utf8onechar('\\1')",$unicode_c);
    return$unicode_c;
}


entity2utf8onechar方法来自http://blog.sina.com.cn/s/blog_48d7f3f40100o6ak.html

使用方式:

$utf8chars= entities2utf8("啊你好啊");

 http://www.welefen.com/php-unicode-to-utf8.html

### 回答1: 可以使用Python内置的encode()函数将ANSI编码换为UTF-8编码。具体操作如下: 1. 打开ANSI编码的文件,读取文件内容。 2. 使用encode()函数将文件内容换为UTF-8编码。 3. 将换后的内容写入新的文件中,保存为UTF-8编码的文件。 示例代码如下: ```python # 打开ANSI编码的文件 with open('ansi.txt', 'r', encoding='ansi') as f: content = f.read() # 将ANSI编码换为UTF-8编码 utf8_content = content.encode('utf-8') # 将换后的内容写入新的文件中 with open('utf8.txt', 'w', encoding='utf-8') as f: f.write(utf8_content.decode('utf-8')) ``` 注意:在使用encode()函数将ANSI编码换为UTF-8编码时,需要先将文件内容解码为Unicode字符串,然后再进行编码。在将换后的内容写入新的文件中时,需要将Unicode字符串再次编码UTF-8编码。 ### 回答2: ANSI编码UTF-8编码是两种不同的字符编码方式,其中ANSI编码是在Windows下常用的字符编码方式,而UTF-8编码是一种通用的字符编码方式。因此,如果需要将ANSI编码转为UTF-8编码,可以通过以下步骤实现。 首先,需要使用Python中的open()函数打开待换的ANSI编码文件,并指定字符编码为ANSI,例如: with open('file.txt', 'r', encoding='ANSI') as f: content = f.read() 接着,可以将读取的文件内容使用encode()方法进行UTF-8编码,例如: utf8_content = content.encode('utf-8') 最后,将换后的内容写入到新文件中,例如: with open('new_file.txt', 'w', encoding='utf-8') as f: f.write(utf8_content.decode('utf-8')) 需要注意的是,在将ANSI编码换为UTF-8编码时,需要确保两种编码方式的字符集是一致的,否则可能会导致换失败或出现乱码的情况。此外,在使用encode()和decode()方法时,需要指定相应的字符编码方式,否则也可能会产生编码错误或乱码的问题。 通过以上操作,就可以将ANSI编码换为UTF-8编码了。这一过程并不难,但需要特别注意编码方式是否正确。 ### 回答3: Python中有许多方法可以将ANSI编码换为UTF-8编码。ANSI编码通常是指Windows默认的编码格式,而UTF-8编码则是一种常用的Unicode编码格式。 以下是一些将ANSI编码换为UTF-8编码方法: 1. 使用Python内置的编码方法 使用Python内置的encode()方法可以将ANSI编码换为UTF-8编码。示例代码如下: ```python ansi_text = '你好,世界!' utf8_text = ansi_text.encode('utf-8') print(utf8_text) ``` 2. 使用第三方库 Python中有许多第三方库可以用于编码换。常用的库包括chardet、iconv、iconv-lite等。 ```python import chardet ansi_text = '你好,世界!' encoding = chardet.detect(ansi_text)['encoding'] utf8_text = ansi_text.encode(encoding).decode('utf-8') print(utf8_text) ``` 3. 使用操作系统的命令行工具 在Windows下,可以使用命令行工具iconv来进行编码换。先安装iconv,并将路径添加到环境变量,然后使用以下命令进行换: ```python import os ansi_text = '你好,世界!' utf8_text = os.popen(f'iconv -f GBK -t UTF-8 <<< {ansi_text}').read().strip() print(utf8_text) ``` 总之,无论使用Python内置的方法还是第三方库或者操作系统的命令行工具,换ANSI编码UTF-8编码是十分简单的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值