js字符串编码和unicode编码互转

//字符串编码转为unicode编码function charToUnicode(str) {
    let temp;
    let i = 0;
    let r = ‘‘;
    let len = str.length;

    for (; i < len; i++) {
        temp = str.charCodeAt(i).toString(16);

        while ( temp.length < 4 )
        temp = ‘0‘ + temp;

        r += ‘\\u‘ + temp;
    };

    return r;
}

  

//unicode编码转为字符串编码function unicodeToChar(str){
   //方案一
  return eval("‘" + str + "‘");
  //方案二
  return unescape(str.replace(/\u/g, "%u"));
}
//js获取字符串长度(字符真实个数)
//由于es5之前都将此类四个字节组成的字符"??"("??".length == 2)处理成2个长度,所以使用"for of"方法可以正确遍历字符串的长度
function getLength(str){
    let length = 0;
    for(let val of str){
        length++
    }
    return length
}

  

//codePointAt方法是测试一个字符由两个字节还是由四个字节组成的最简单方法。

function is32Bit(c) {
  return c.codePointAt(0) > 0xFFFF;
}

is32Bit("??") // true
is32Bit("啊") // false
is32Bit("a") // false

  

//实际使用中,一般设计会认为中文字符如‘啊‘,‘哦‘,‘额‘,‘,‘等理解为为两个长度,英文字符和数字如‘a‘,‘1‘,‘,‘等理解为为一个长度,所以此方法可以获取他们认为的字符串长度(注意,不是字符串的真是长度,只是设计师理解的长度)
function getViewLength(str){
    let length = 0;
    for (let c of str){//注意使用for of可以正确的遍历字符串的长度,而其他方法会将"??"当成两个长度遍历
        if(c.codePointAt(0) > 0x00FF){length = length + 2}//不管是两个字节的字符如‘啊‘,还是四个字节的字符‘??‘,都‘当成‘是属于两个字符长度的范围
‘ else{length++} } return length }

  

  

原文地址:https://www.cnblogs.com/xuanbingbingo/p/8951743.html

时间: 2024-10-07 07:07:38

js字符串编码和unicode编码互转的相关文章

【ANSI编码和Unicode编码】

最近在对之前的代码进行优化,主要是把界面全部换成GUI形式的(就是市面上的这种),之前进行数据查询的时候没问题,但是换成GUI的时候,由于输入的的是Unicode编码,而处理的时候又强制转换成ANSI编码,经过一番查阅(刚开始还以为强制转换是万能的....),才发现...看来之前还是低估了它~~~ 以下是相关的介绍 常规的ANSI编码(使用""包裹)和Unicode编码(使用L""包裹),这样对应的就有了两套字符串处理函数,比如:strlen和wcslen,分别用于

中文转换成Unicode编码 和 Unicode编码转换为中文

前几天,遇到一个问题,就是在浏览器地址栏传递中文时,出现乱码,考虑了一下,解决方式有很多,我还是采用了转换编码的方式,将中文转换为Unicode编码,然后再解码成中文,以下是实现的过程,非常简单! package cy.code; public class CyEncoder { private String zhStr; //中文字符串 private String unicode;//将中文字符串转换为Unicode编码 存储在这个属性上. public CyEncoder(String z

ASCII编码和Unicode编码

ASCII编码和Unicode编码的区别:ASCII编码是1个字节,而Unicode编码通常是2个字节. 字母A用ASCII编码是十进制的65,二进制的01000001: 字符0用ASCII编码是十进制的48,二进制的00110000,注意字符'0'和整数0是不同的: 汉字中已经超出了ASCII编码的范围,用Unicode编码是十进制的20013,二进制的01001110 00101101. 你可以猜测,如果把ASCII编码的A用Unicode编码,只需要在前面补0就可以,因此,A的Unicod

java 中文转换成Unicode编码和Unicode编码转换成中文

转自:一叶飘舟 http://blog.csdn.net/jdsjlzx/article/details/7058823 package lia.meetlucene; import java.io.IOException; import org.apache.lucene.index.CorruptIndexException; public class Unicode { public static void main(String[] args) throws CorruptIndexEx

SQL Server 中怎么查看一个字母的ascii编码或者Unicode编码

参考文章:微信公众号文章 一直对sql中的left和right有误解,一直以为它是这样的. SELECT Mobile FROM dbo.T_User WHERE Id = 1 执行这样一句: SELECT LEFT(Mobile,2) leftNum FROM dbo.T_User WHERE Id = 1 SELECT RIGHT(Mobile,2) rightNum FROM dbo.T_User WHERE Id = 1 出现的结果是这样的: 而我心中这样认为: 我认为只出现第二个. 运

刨根究底字符编码之八——Unicode编码方案概述

Unicode编码方案概述 1. 前面讲过,随着计算机发展到世界各地,于是各个国家和地区各自为政,搞出了很多既兼容ASCII但又互相不兼容的各种编码方案.这样一来同一个二进制编码就有可能被解释成不同的字符,导致不同的字符集在交换数据时带来极大的不便. 比如大陆和台湾是只相隔150海里.使用着同一种语言的兄弟地区,也分别采用了不同的DBCS双字节字符集编码方案. 以前大陆地区必须装上类似于"UCDOS希望汉字系统"这样的中文处理系统专门来处理简体汉字的显示.输入问题. 而台湾地区由于采用

js 16进制Unicode编码与中文相互转换

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> <TITLE> New Document </TITLE> <script language=javascript> function utf8to16(str) { var out, i, len, c; var char2, char3; out = &quo

VS2010与VS2013中的多字节编码与Unicode编码问题

1. 多字节字符与单字节字符 char与wchar_t 我们知道C++基本数据类型中表示字符的有两种:char.wchar_t. char叫多字节字符,一个char占一个字节,之所以叫多字节字符是因为它表示一个字时可能是一个字节也可能是多个字节.一个英文字符(如's')用一个char(一个字节)表示,一个中文汉字(如'中')用3个char(三个字节)表示. wchar_t被称为宽字符,一个wchar_t占2个字节.之所以叫宽字符是因为所有的字都要用两个字节(即一个wchar_t)来表示,不管是英

所有的字符编码由System.Text.Encoding类获取所有的字符编码如Unicode编码、 GB18030编码、(UTF-8) 简体中文(GB2312)

本页列出来目前window下所有支持的字符编码  ---通过 System.Text.Encoding.GetEncodings()获取,里面可以对其进行查询,筛选,对同一个字符,在不同编码进行查看和分析... 代码页编号 名称 代码 类型 单字节码位 37 IBM EBCDIC (美国-加拿大) IBM037 SBCSCodePageEncoding 是 437 OEM 美国 IBM437 SBCSCodePageEncoding 是 500 IBM EBCDIC (国际) IBM500 SB