如何用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, "&#x$2;") );

UTF-8编码转换为中文:
function ResChinese(obj, btn)
document.getElementById("content").value = unescape(obj.value.replace(/&#x/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, "&#x$2;") );</FONT>function ResChinese(obj, btn) document.getElementById(</FONT>"content").value = unescape(obj.value.replace(/&#x/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) )

如何用javascript将字符串转换成数组

LINUX下如何用G++编c++,给一个详细的实例就好

如何用JavaScript实现Hex与ASCII之间的转换

如何用javascript或jquery实现图片与二进制的转换

大侠们,在jsp页面如何用javascript获取系统时间并转换格式为“yyyy-mm-dd”?