如何用javascript将中文转换为UTF-8编码?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用javascript将中文转换为UTF-8编码?相关的知识,希望对你有一定的参考价值。
//--------把中文字符转换成Utf8编码------------------------//function EncodeUtf8(s1)
var s = escape(s1);
var sa = s.split("%");
var retV ="";
if(sa[0] != "")
retV = sa[0];
for(var i = 1; i < sa.length; i ++)
if(sa[i].substring(0,1) == "u")
retV += Hex2Utf8(Str2Hex(sa[i].substring(1,5)));
else retV += "%" + sa[i];
return retV;
function Str2Hex(s)
var c = "";
var n;
var ss = "0123456789ABCDEF";
var digS = "";
for(var i = 0; i < s.length; i ++)
c = s.charAt(i);
n = ss.indexOf(c);
digS += Dec2Dig(eval_r(n));
//return value;
return digS;
function Dec2Dig(n1)
var s = "";
var n2 = 0;
for(var i = 0; i < 4; i++)
n2 = Math.pow(2,3 - i);
if(n1 >= n2)
s += '1';
n1 = n1 - n2;
else
s += '0';
return s;
function Dig2Dec(s)
var retV = 0;
if(s.length == 4)
for(var i = 0; i < 4; i ++)
retV += eval_r(s.charAt(i)) * Math.pow(2, 3 - i);
return retV;
return -1;
function Hex2Utf8(s)
var retS = "";
var tempS = "";
var ss = "";
if(s.length == 16)
tempS = "1110" + s.substring(0, 4);
tempS += "10" + s.substring(4, 10);
tempS += "10" + s.substring(10,16);
var sss = "0123456789ABCDEF";
for(var i = 0; i < 3; i ++)
retS += "%";
ss = tempS.substring(i * 8, (eval_r(i)+1)*8);
retS += sss.charAt(Dig2Dec(ss.substring(0,4)));
retS += sss.charAt(Dig2Dec(ss.substring(4,8)));
return retS;
return "";
参考技术A (1)在网页head标签里添加<meta charset="utf-8"></meta>即可转换为utf-8编码
(2)要是转换为中文同理只需将charset="gb2312"即可 参考技术B 中文转换为UTF-8编码:
function ConvUtf(obj, btn)
document.getElementById("result").value = obj.value.replace(/[^\u0000-\u00FF]/g, function ($0) return escape($0).replace(/(%u)(\w4)/gi, "$2;") );
UTF-8编码转换为中文:
function ResChinese(obj, btn)
document.getElementById("content").value = unescape(obj.value.replace(//g, '%u').replace(/;/g, ''));
参考技术C 匿名的那位是对的,代码当中确实有,这个应该是可以的:function ConvUtf(obj, btn) document.getElementById(</FONT>"result").value = obj.value.replace(/[^\u0000-\u00FF]/g, function ($0) return escape($0).replace(/(%u)(\w4)/gi, "$2;") );</FONT>function ResChinese(obj, btn) document.getElementById(</FONT>"content").value = unescape(obj.value.replace(//g, '%u').replace(/;/g, '')); </FONT>转自http://blog.csdn.net/ji_gr/archive/2004/07/22/48813.aspx//--------把中文字符转换成Utf8编码------------------------//
function EncodeUtf8(s1)
var s = escape(s1);
var sa = s.split("%");
var retV ="";
if(sa[0] != "")
retV = sa[0];
for(var i = 1; i < sa.length; i ++)
if(sa[i].substring(0,1) == "u")
retV += Hex2Utf8(Str2Hex(sa[i].substring(1,5)));
else retV += "%" + sa[i];
return retV;
function Str2Hex(s)
var c = "";
var n;
var ss = "0123456789ABCDEF";
var digS = "";
for(var i = 0; i < s.length; i ++)
c = s.charAt(i);
n = ss.indexOf(c);
digS += Dec2Dig(eval(n));
//return value;
return digS;
function Dec2Dig(n1)
var s = "";
var n2 = 0;
for(var i = 0; i < 4; i++)
n2 = Math.pow(2,3 - i);
if(n1 >= n2)
s += '1';
n1 = n1 - n2;
else
s += '0';
return s;
function Dig2Dec(s)
var retV = 0;
if(s.length == 4)
for(var i = 0; i < 4; i ++)
retV += eval(s.charAt(i)) * Math.pow(2, 3 - i);
return retV;
return -1;
function Hex2Utf8(s)
var retS = "";
var tempS = "";
var ss = "";
if(s.length == 16)
tempS = "1110" + s.substring(0, 4);
tempS += "10" + s.substring(4, 10);
tempS += "10" + s.substring(10,16);
var sss = "0123456789ABCDEF";
for(var i = 0; i < 3; i ++)
retS += "%";
ss = tempS.substring(i * 8, (eval(i)+1)*8);
retS += sss.charAt(Dig2Dec(ss.substring(0,4)));
retS += sss.charAt(Dig2Dec(ss.substring(4,8)));
return retS;
return "";
将 Javascript UTF-8 转换为 ASCII(如 PHP 中的 Iconv('UTF-8', 'ASCII//TRANSLIT', $string) )
【中文标题】将 Javascript UTF-8 转换为 ASCII(如 PHP 中的 Iconv(\'UTF-8\', \'ASCII//TRANSLIT\', $string) )【英文标题】:Convert Javascript UTF-8 to ASCII (like Iconv('UTF-8', 'ASCII//TRANSLIT', $string) in PHP)将 Javascript UTF-8 转换为 ASCII(如 PHP 中的 Iconv('UTF-8', 'ASCII//TRANSLIT', $string) ) 【发布时间】:2012-10-29 20:44:30 【问题描述】:我想知道如何使用 Javascript 将 UTF-8 中的字符“翻译”为最接近的 ASCII 等效字符,就像 PHP 中的 Iconv 所做的那样。
例子:
ü变成uó变成o
我宁愿不使用替换,因为 a) 它需要完整的字符集,这需要大量工作,并且 b) 我很难获得完整的字符集,我会永远不要确定我是否缺少一两个。
【问题讨论】:
当您说“UTF-8”时,您真的是指 UTF-8 吗?就像一串“字符”,其元素实际上根本不是字符,而只是提升为 16 位的 UTF-8 代码单元?还是您的意思是“Unicode”,即普通的 JavaScript UTF-16 字符串? 这是可能的,但除了将 Unicode 值映射到您(或某人)认为合适的任何 ASCII“等效”值之外,没有算法方法可以做到这一点。请注意,UTF-8 字符串可能包含 许多 个非常不同的字母表的代码点。 这个术语是“转录”或“音译”,可能有一些图书馆。 【参考方案1】:我发现的最简单的方法:
var str = "üó";
var combining = /[\u0300-\u036F]/g;
console.log(str.normalize('NFKD').replace(combining, ''));
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize
【讨论】:
唯一的缺点:它是 EcmaScript 6 的一部分,并不适用于所有浏览器 另一个缺点:只包括组合标记,不包括完整的音译。 查看类似的 SO 问题并接受 cmets 的答案,为什么上述代码不起作用 - cmets 列出此代码无法替换的字母:***.com/questions/990904/…【参考方案2】:正如@Pointy 所说,您唯一的选择是根据字典映射/替换字符。
你会发现这真的很有用:https://github.com/backbone-paginator/backbone.paginator/blob/a579796a30e583c4dfa09e0a86e4abd21e0b5b56/plugins/diacritic.js
【讨论】:
这里有更多unicode.org/repos/cldr/trunk/common/transforms/Latin-ASCII.xml Uoah @Esailija !这真的很完整! :) 我意识到这是一个旧答案,但 GitHub 链接已损坏。 @Jaruba 给你,伙计 :) github.com/backbone-paginator/backbone.paginator/blob/…【参考方案3】:现在有一个iconv到JS的端口:https://www.npmjs.com/package/iconv
var iconv = new Iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE');
iconv.convert('ça va が'); // "ca va "
【讨论】:
以上是关于如何用javascript将中文转换为UTF-8编码?的主要内容,如果未能解决你的问题,请参考以下文章
将 Javascript UTF-8 转换为 ASCII(如 PHP 中的 Iconv('UTF-8', 'ASCII//TRANSLIT', $string) )