精华内容
下载资源
问答
  • uniapp蓝牙项目,需要向蓝牙传递中文字符,并且接收蓝牙中文hex转成中文格式显示。

    hex转str

    uniapp蓝牙项目,需要向蓝牙传递中文字符,并且接收蓝牙中文hex转成中文格式显示。

    let readUTF = function(arr) {
    	if (typeof arr === 'string') {
    		return arr;
    	}
    	let UTF = '', _arr = arr;
    	for (let i = 0; i < _arr.length; i++) {
    		let one = _arr[i].toString(2), v = one.match(/^1+?(?=0)/);
    		if (v && one.length == 8) {
    			let bytesLength = v[0].length;
    			let store = _arr[i].toString(2).slice(7 - bytesLength);
    			for (let st = 1; st < bytesLength; st++) {
    				store += _arr[st + i].toString(2).slice(2)
    			}
    			UTF += String.fromCharCode(parseInt(store, 2));
    			i += bytesLength - 1
    		} else {
    			UTF += String.fromCharCode(_arr[i])
    		}
    	}
    	return UTF
    }
    // hexToString
    let hexToString = function (str) {
      if (str.length % 2 != 0) {
        return console.log('必须为偶数');
      }
      let buf = [];
      for (let i = 0; i < str.length; i += 2) {
        buf.push(parseInt(str.substring(i, i + 2), 16));
      }
      return readUTF(buf);
    }
    

    调用方法:

    hexToString('e4bda0e5a5bd')
    // return 你好
    

    str转hex

    let bin2Hex = function (str) {
      let re = /[\u4E00-\u9FA5]/
      let ar = []
      for (let i = 0; i < str.length; i++) {
        let a = ''
        if (re.test(str.charAt(i))) { // 中文
            a = encodeURI(str.charAt(i)).replace(/%/g, '')
        } else {
            a = str.charCodeAt(i).toString(16)
        }
        ar.push(a)
      }
      str = ar.join('')
      return str
    }
    

    调用方法:

    bin2Hex ('你好')
    // return E4BDA0E5A5BD
    

    参考网址

    展开全文
  • 昨天從FB下載了一份包含所有對話紀錄的JSON檔,但裡面的中文字編碼有問題,通通變成下面這個樣子 "\u00e7\u0094\u009f\u00e6\u0097\u00a5" 本來想說這種事情應該很簡單,就把他每個字元當成char存不就得了,結...

    昨天從FB下載了一份包含所有對話紀錄的JSON檔,但裡面的中文字編碼有問題,通通變成下面這個樣子

    "\u00e7\u0094\u009f\u00e6\u0097\u00a5"
    

    本來想說這種事情應該很簡單,就把他每個字元當成char轉存不就得了,結果轉出來的東西從網頁上看還是一團亂碼…

    錯誤的嘗試

    既然轉換之後仍然是亂碼,那至少代表這個編碼不是utf-8,那會不會是big5或其他現在比較少看到的編碼呢?所以我試著切換 html 檔的 charset,但仍然得到錯誤的結果

    çæ¥å¿«æ¨å  //這到底是什麼鬼東西
    

    整理思路

    後來注意到一件小事情是,他所有的16進位資料都是\u00開頭,或許意味著只有後兩位有意義?於是我把字頭全部取代後得到下面的結果

    E7 94 9F E6 97 A5
    

    這東西看起來很像是在使用記憶體修改器會看到的東西,於是我稍微有思緒了:他實際上應該是byte[]。也循線找到了網站測試證明了我的想法是正確的

    Hex decoder: Online hexadecimal to text converter

    byte array to string

    搞懂他到底是什麼編碼格式之後,就是要開始寫轉檔程式了(總不能一行一行貼上去面的網站翻譯吧)在 stackoverflow 上有這麼一篇提問:How to convert UTF8 string to byte array? 下方的解答有人分享了轉換的規則:

    • 多位元組的情形下,第一個位元組前面1的數量即代表該字元所需要的位元組數量。扣除這個資訊所占用的位元後剩下的位元即為資料區塊
    • 後面接著的延續位元組,其格式固定為10字頭,後面的六個位元為資料區塊
    • 將所有的資料區塊全部拼起來即為utf-8

    以我上面分享的第一個字為例子
    前三碼E7 94 9F轉成二進制的資料呈現以下的樣子

    11100111 10010100 10011111
    
    1. 第一組前面有3個1,代表這個字要用到三個位元組
    2. 扣除記錄這個資訊的區塊後,剩下的00111即為第一塊資料區
    3. 第二組為延續位元組,其前兩碼固定為10,後面的010100即為資料區
    4. 第三組為延續位元組,其前兩碼固定為10,後面的011111即為資料區
    5. 三組資料全部拼起來00111010100011111就是這個字的 utf-8 碼
    6. 把這個二進制資料轉回 int 後再轉成 char 就會看到正確的中文字了
      String.fromCharCode(parseInt('00111010100011111',2)) //'生'
      

    寫成程式

    最後就是把上面的邏輯寫成程式碼了

    
    function hex2a(hexx) {
        var hex = hexx.toString();//force conversion
        var str = '';
        for (var i = 0; (i < hex.length && hex.substr(i, 2) !== '00'); i += 2)
            str += String.fromCharCode(parseInt(hex.substr(i, 2), 16));
    
        return str;
    }
    
    function decode(text) {
        if (!text)
            return "";
    
        //string to byte[]
        let byteArr = [];
        for (let i = 0; i < text.length; i++) {
            byteArr.push(text.charCodeAt(i));
        }
    
        let str = "";
        for (let i = 0; i < byteArr.length;) {
            let binary = byteArr[i].toString(2);
            let head = binary.match(/^1+?(?=0)/);
    
            if (head && binary.length == 8) {
                //該字元需要幾個位元組
                let bytesLength = head[0].length;
                //第一個位元組的實際資料區                 
                let body = binary.slice(bytesLength);
                for (let j = 1; j < bytesLength; j++) {
                    //組合資料
                    body += byteArr[i + j].toString(2).slice(2);
                }
                str += String.fromCharCode(parseInt(body, 2));
                i += bytesLength;
            } else {
                str += String.fromCharCode(byteArr[i]);
                i++;
            }
        }
        return str;
    }
    
    aa=decode("\u00e7\u0094\u009f\u00e6\u0097\u00a5"); // returns '2460'
    
    console.log(aa)

    view rawbyte-array-to-string.js hosted with ❤ by GitHub

     

    後記

    • 好久沒有碰到需要直接操作位元的問題,大學修的計概都還給教授了Orz
    • 組資料的地方如果可以直接用<<>>進行位元計算性能應該會比字串處理提升很多,改天再來修改程式碼吧。
    • 實測發現emoji轉不出來🤔🤔🤔
    展开全文
  • JS版的bin2hexhex2bin,支持汉字

    千次阅读 2020-05-05 18:19:35
    function bin2hex(str) { var re = /[0-9a-zA-Z_.~!*()]/; var ret = ''; for (var i = 0, l = str.length; i < l; i++) { if (re.test(str.charAt(i))) { ret += str.charCodeA...

    PHP函数有 bin2hex和hex2bin,JS没相应函数,自己动手写了一个

    function bin2hex(str) {
        var ret = '';
        var r = /[0-9a-zA-Z_.~!*()]/;
        for (var i = 0, l = str.length; i < l; i++) {
            if (r.test(str.charAt(i))) {
                ret += str.charCodeAt(i).toString(16);
            } else {
                ret += encodeURIComponent(str.charAt(i)).replace(/%/g, '');
            }
        }
        return ret;
    }

    function hex2bin(str) {
        var ret = '';
        var tmp = '';
        for (var i = 0; i < str.length - 1; i += 2) {
            var c = String.fromCharCode(parseInt(str.substr(i, 2), 16));
            if (c.charCodeAt() > 127) {
                tmp += '%' + str.substr(i, 2);
                if (tmp.length == 9) {
                    ret += decodeURIComponent(tmp);
                    tmp = '';
                }
            } else {
                ret += c;
            }
        }
        return ret;
    }

    本文对您如有帮助,请在本文下面“点赞”支持一下,谢谢!

    全文结束【EOF】

    展开全文
  • 简介:heX,一个允许你采用前端技术(HTML,CSS,JavaScript)开发桌面应用软件的跨平台解决方案。是你开发桌面应用的一种新的选择,意在解决传统桌面应用开发中繁琐的UI和交互开发工作,使其变的简单而高效。特别...

    本文转载自:http://techblog.youdao.com/?p=685

     

    简介:heX,一个允许你采用前端技术(HTML,CSS,JavaScript)开发桌面应用软件的跨平台解决方案。是你开发桌面应用的一种新的选择,意在解决传统桌面应用开发中繁琐的UI和交互开发工作,使其变的简单而高效。特别适合重UI,重交互的桌面应用软件。

    欢迎关注http://hex.youdao.com  或微博 @youdao_hex

    一、项目背景

    二、用heX开发桌面应用的优势

    三、如何用heX开始一个桌面应用程序

     

    一、项目背景

    近几年,移动应用和web2.0大行其道,相比之下,传统桌面应用程序开发显得相对冷清(包括该领域技术人才的后继力量),但在一些场景下,它依然有其不可替代的优势。探索中我们尝试了一种新的办法,并给它取名heX,将HTML5和Node.JS的技术优势,应用于桌面应用程序开发,使得工作变得简单而高效。

    2012年前后,一位研发工程师(外号6哥,精通web前端和桌面应用开发),先后参与了两个传统桌面应用程序UI改版工作(有道云笔记有道词典),任务是把软件界面中部分区域的浏览器渲染引擎,由IE内核替换为webkit,在这个过程中,有一种强烈的欲望:把整个软件界面的渲染都交由浏览器引擎来完成,这样一来,UI和交互部分都可以用前端技术来实现,那么,开发过程将变的简单许多,而客户端开发人员的主要精力也可放在业务逻辑上,何乐而不为!

    为此,我们做了大量的调研,经反复尝试,最终确定通过整合Chromium和Node.JS,来解决桌面应用开发中遇到的大量繁琐的UI和交互开发工作。期间,发现一款类似的开源项目node-webkit,调研的结论是它暂时还无法用于正式的项目,所以,于2012年6月,我们正式成立一人开发小组(确实够小),经3个月的努力,终有小成,现已经应用于有道词典最新版。

    简要介绍下选择Chromium和Node.JS的原因,同时,也在这里对他们表示感谢。

    选择Chromium,是因为它对HTML5的支持非常优秀,其内嵌的V8引擎,更是业内效率最好的JavaScript脚本引擎之一,且其项目开源,又有专门的社区和团队维护,作为UI渲染引擎,它是不二之选,体验上,你可以试用下google chrome浏览器,基本一致。

    选择Node.JS,是因为开发桌面应用,本地资源操作是必备的能力,这方面JavaScript无能为力,而Node.JS则很好的解决了这个问题,它使得JavaScript操作本地资源变的毫无障碍。另一方面,Node.JS核心也是采用V8引擎,使得其与Chromium的整合变得更顺理成章。

    二、用heX开发桌面应用的优势

    HTML5这几年很火,在成熟产品中的应用却极少,受各浏览器和平台的软/硬件性能问题的限制,整体感觉总是难以舒展(用的不踏实),具体原因网上可以找到一大堆,这里列举一个移动web app相关的,中英对照版,推荐抽空看一看:

    英文版:http://sealedabstract.com/rants/why-mobile-web-apps-are-slow/

    中文版:http://www.cnblogs.com/codemood/p/3213459.html

    尽管如此,HTML5的优势依然很明显,普及程度也正逐年提高,我们对它的未来信心十足。好东西,都值得我们主动去尝试,heX做的一个事情,就是提前把它应用于桌面应用开发,而不用顾忌它的兼容性和平台性能问题(PC性能过剩)。

    用HTML5开发桌面应用,到底有什么样的优势呢?这里列举几项:

    1. 精准还原UI设计。现在客户端软件UI设计用native方式来实现的成本越来越高,对HTML5来说却很容易,对后续的维护也非常的友好;

    2. 用户体验。如果你不清楚HTML5所能做到的体验效果,可以看看Chrome Experiments(http://www.chromeexperiments.com/);

    3. 开发调试便利。heX保留了开发者工具(Chrome Developer Tools),让你在开发调试过程中,就如同web开发一样便利;

    4. 学习成本。相比传统桌面应用开发,web技术的入门成本明显偏低,你不用担心团队成员的离开,而苦于寻找后续开发力量。

    桌面应用开发,本地资源操作能力必不可少,Node.JS提供了丰富的自带API,让你免于逐个封装C++实现,就能在heX环境下的html页面中直接使用,如:本地文件系统操作,二进制数据处理,方便的创建子进程等等,详见Node.JS API DOCS

    在桌面应用开发中用Node.JS的好处(一部分来自于heX的努力):

    1. 直接用JavaScript对本地资源进行操作,相比C/C++,你无需编译,即写即用;

    2. 页面交互逻辑,窗体行为操作,与C++通信,用JavaScript都能搞定,开发一个桌面应用,你无需在语言之间来回切换;

    3. Node.JS丰富的第三扩展,你都可以直接使用,无需从零开始;

    4. 继承于Node.JS优秀的扩展能力,以及它所遵循的commonjs规范,代码管理也将变的方便和易于控制。

    从技术角度来讲,选择一个新生事物,我们持谨慎态度,需要经过充分的调研,考虑的因素众多,比如:性能,用户体验,开发效率,是否有团队在维护,文档是否完备,是否开源(如果是商业用处,还需考虑它的开源协议)等等。

    而heX作为桌面应用开发的一种新的选择,它在这些方面的表现如何呢?前面已经讲到一些,这里再补充几点:

    1. 性能和体验,heX的基础由Chromium和Node.JS整合而成,整合后这两者的性能表现不受影响,体验方面,你可以参考google chrome浏览器,基本保持一致;

    2. 开发效率,如果你有过web前端开发经历,现在仅要求你支持最新版的chrome浏览器,你觉得如何?睡着了都能笑醒的事,heX做到了;

    3. heX即将开源,请大家关注  http://hex.youdao.com 和 @yoduao_hex

    一种东西,只能解决一方面的需求,heX亦非万能,亦有它适合的使用场景,最适合重UI、重交互的桌面应用,比如即将推出的新版有道词典(亿级桌面应用软件)beta版,就是采用heX作为其界面的解决方案。

    三、如何用heX开始一个桌面应用程序

    采用heX开发桌面应用程序,有两种方式:

    1. 直接基于heX做开发,针对web前端开发者,不要求桌面应用开发经验;

    2. 以模块形式引入到现在桌面工程中,针对传统桌面应用开发者,适合有一定历史的项目,或仅在界面中局部区域支持即可的项目。

    不管采用哪种方式,开发过程都很简单,这里就第一种方式,从零开始,一起来制作一个 hello word,如下:

    1、下载heX二进制包(http://codown.youdao.com/hex/hex_1453_web_develop_windows.zip),解压到本地,打开后目录结构如下图所示,其中“hexclient.exe”是主程序文件,双击即可运行heX,“manifest.json”是heX的配置文件,可配置入口文件,窗口初始大小、位置等信息

    1

    2、创建一个用于写hello word程序的测试目录“test”,同时在其中新建html、js文件,如下图所示

    23

    3、修改manifest.json文件,入口改为test/index.html,如下图所示

    4

    4、双击 hexclient.exe,运行,一秒后界面由“……”变为“Hello Word!”,如下图所示,到此为止,一个简单的桌面应用就搞定了

    5

    正式产品案例:目前已经应用于新版有道词典(亿级桌面客户端软件)beta版,下图的整个界面和交互都是基于heX实现,欢迎下载体验:http://download.ydstatic.com/cidian/static/6.0/20130812/YoudaoDict.exe

    6

    了解更多heX信息欢迎微博 @youdao_hex 或访问http://hex.youdao.com

    PS:另外腾讯有一款和这个一样的东西,叫

    AlloyDesktop

    http://tencentopen.github.io/proj/AlloyDesktop/index.html

    转载于:https://www.cnblogs.com/wpcnblog/p/4629397.html

    展开全文
  • JavaScript库 +展开 -JavaScript varGB2312UnicodeConverter={ToUnicode:function(str){returnescape(str).toLocaleLowerCase().replace(/%u/gi,'\\u');},ToGB2312:function(str){returnunescape(...
  • heX 是网易有道团队的一个开源项目,允许你采用前端技术(HTML,CSS,JavaScript)开发桌面应用软件的跨平台解决方案。heX是你开发桌面应用的一种新的选择,意在解决传统桌面应用开发...
  • 用了: 1.[url]http://aub.iteye.com/blog/1129228[/url] 2.[url]http://blog.csdn.net/hzbigdog/article/details/6877712[/... 这2篇文章的方法,出来都是乱码,求解! 可以加我QQ:381195382 非常感谢!
  • javascript汉字转拼音 [zt]

    万次阅读 2008-02-28 16:49:00
    var strGB="啊阿埃挨哎唉哀皑癌蔼矮艾碍爱隘鞍氨安俺按暗岸胺案肮昂盎凹...撰赚篆桩庄装妆撞壮状椎锥追赘坠缀谆准捉拙卓桌琢茁酌啄着灼浊兹咨资姿滋淄孜紫仔籽滓子自渍字鬃棕踪宗综总纵邹走奏揍租足卒族祖诅阻组钻纂...
  • JS中文转UTF-8

    2021-09-13 16:46:25
    i++) { if (sa[i].substring(0, 1) == "u") { retV += Hex2Utf8(Str2Hex(sa[i].substring(1, 5))); } else retV += "%" + sa[i]; } return retV; } console.log(EncodeUtf8('哈哈哈')); function Str2Hex(s) { var ...
  • hex 编码

    2017-07-02 00:00:00
    我了解到的办法是: base64和hex.这次来了解下hex. hex是什么: hex的全称为hexadecimal Strings.也就是16进制字符串. 也就是说hex是通过换算,将原先的byte转换成16进制字符串.所以hex的源字符串为0~9 和A~F. 为什么...
  • 最近一个嵌入式项目中需要WEB功能,...由于JavaScript对浮点数的支持很弱,直接使用浮点数十六进制功能,双不能实现平常在C语言中实现的4字节的存储表示法,通过搜索,并没有找到相关功能代码,在Node.js的Buffe...
  • 关键字:JavaScript 汉字转换为Unicode编码 Unicode编码转换为汉字 JavaScript 汉字Unicode编码相互转换代码。JavaScript库 -JavaScript varGB2312UnicodeConverter={ToUnicode:function(str){returnescape(str...
  • 汉字转拼音处理javascript

    千次阅读 2009-05-13 08:42:00
    <script language=javascript>  var spell = {0xB0A1:"a", 0xB0A3:"ai", 0xB0B0:"an", 0xB0B9:"ang", 0xB0BC:"ao", 0xB0C5:"ba", 0xB0D7:"bai", 0xB0DF:"ban", 0xB0EE:"bang", 0xB0FA:"bao", 0xB1AD:"bei", 0xB1BC:...
  • hex_md5('1: ÏtÚë£'); </code></pre> <p>I expect the result to match, but the actual output are the ff: <p>PHP: "3fbee32d8a25287ad7ccbf133d82bb54"</p> <p>Javascript: "9a7246843cd0c5906f2e588f...
  • javascript 汉字与拼音转换

    千次阅读 2007-07-26 16:09:00
    script language=javascript> var spell = {0xB0A1:"a", 0xB0A3:"ai", 0xB0B0:"an", 0xB0B9:"ang", 0xB0BC:"ao", 0xB0C5:"ba", 0xB0D7:"bai", 0xB0DF:"ban", 0xB0EE:"bang", 0xB0FA:"bao", 0xB1AD:...
  • /* * 字节编码转换 * 首先都需要转为二级制数组 (ArrayBuffer) * 然后才能转换对应的编码字符 ...* hex:将二进制每8个字节转为对应的2个十六进制的字符串 * */ // utf8 转为 base64/hex let ...
  • 前段时间遇到一个奇葩问题,是一个朋友问如何将一段16...json字符串转hex stringtoHex (str) { var val = ""; for (var i = 0; i < str.length; i++) { if (val == "") val = str.charCodeAt(i).toString(16);
  • Bin_Hex转换工具

    2009-02-06 14:53:39
    这是一款Bin to Hex 文件转换的专用工具,简单实用,希望为你的开发带来方便!
  • js 汉字ASCII相互转换

    2009-05-07 23:31:16
    <script type="text/javascript"><!-- var keyStr = "ABCDEFGHIJKLMNOP" + "QRSTUVWXYZabcdef" + "ghijklmnopqrstuv" + "wxyz0123456789+/" + "="; function native2ascii(strNative) { var output = ""; for ...
  • 简介:heX,一个允许你采用前端技术(HTML,CSS,JavaScript)开发桌面应用软件的跨平台解决方案。是你开发桌面应用的一种新的选择,意在解决传统桌面应用开发中繁琐的UI和交互开发工作,使其变的简单而高效。特别...
  • 开发过程中,字符串与十六进、二进制之间的相互转换常常会用到,尤其是涉及到中文的加密时,就需要把中文转换为十六进制。下面说说具体的转换方法。1、字符串转换为十六进制主要使用 charCodeAt()方法,此方法返回一...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,346
精华内容 2,938
关键字:

js汉字转hex