热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Erlang中文简体字GB2312转unicode的办法(1)

这些天,一直在琢磨Erlang中文简体字转unicode的办法。想到过,用port,C或Python外部模块;用erts&#

这些天,一直在琢磨Erlang中文简体字转unicode的办法。想到过,用 port,C或Python外部模块;用erts,dict,array,但不仅都太烦琐,甚至没怎么看懂。

编程需要考虑的两大问题:功能与效率。

效率,不仅是程序运行效率,还有编程工作效率。

代码越简单效率越高。用简单的工具和办法,显不出学术理论水平,所以,常见玩高深的。

中文简体字转unicode,不是高深的问题,涉及的理论和多种解决方案,网上都能找到。

需要的是,从中得到启发,想出在Erlang中适用的最简单的办法。

还好,我找到了。

一、在Erlang中使用编码转换表

转码的办法有两类,一是用算法随机转换,它省空间费时间;二是查找事先建立的编码表,它省时间费空间。

从实用的要求看,第二种办法比较好。

这个码表结构应该怎样?这要看中文简体字编码和Erlang字符串的相关特点。

中文简体字编码,这里只考虑GB2312,它已能满足太多需求了。它的特点是一个字由两个非ASCII码字节表示,如“中”的编码D6D0。

Erlang的字符串就是整数列表,如“中”是[214,208],unicode是[20013]。

Erlang查询数据,有其内部特殊方法,不用数组下标之类。

根据这些特点,确定使用Erlang的内建函数 put/2, get/1,如:

put({214,208},20013) 将“中”字的unicode写入内存;

Unicode = get({214,208}) 将“中”字的unicode从内存里读出。

下面的函数get_unicode/1,得到整个字符串的unicode,如:get_unicode("中文窗口"),返回[20013,25991,31383,21475]。

get_unicode([],U) -> 

   lists:reverse(U);

get_unicode([A|T],U) when A <128 ->

   get_unicode(T,[A|U]);

get_unicode([A,B|Z],U) -> 

   H &#61; get({A,B}),

   get_unicode(Z,[H|U]).

这个函数可以处理中西文混合的字符串&#xff0c;如&#xff1a; 

get_unicode2("asd中fg34文55窗66口tt4",[])

结果是 [97,115,100,20013,102,103,51,52,25991,53,53,31383,54,54,21475,116,116,52]

下面的问题&#xff0c;是要把GB2312全部汉字及其相应的unicode&#xff0c;逐一put到Erlang进程中。

这个问题&#xff0c;也就是建立在Erlang中使用的编码转换表。它无法在Erlang中编程解决&#xff0c;因为&#xff0c;Erlang的编译器erlc不支持unicode。

具体解决办法&#xff0c;以后接着说。

http://blog.csdn.net/lawme/archive/2009/05/01/4141289.aspx


推荐阅读
  • 技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统
    技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统 ... [详细]
  • MATLAB字典学习工具箱SPAMS:稀疏与字典学习的详细介绍、配置及应用实例
    SPAMS(Sparse Modeling Software)是一个强大的开源优化工具箱,专为解决多种稀疏估计问题而设计。该工具箱基于MATLAB,提供了丰富的算法和函数,适用于字典学习、信号处理和机器学习等领域。本文将详细介绍SPAMS的配置方法、核心功能及其在实际应用中的典型案例,帮助用户更好地理解和使用这一工具箱。 ... [详细]
  • 深入解析:Synchronized 关键字在 Java 中对 int 和 Integer 对象的作用与影响
    深入探讨了 `Synchronized` 关键字在 Java 中对 `int` 和 `Integer` 对象的影响。尽管初看此题似乎简单,但其实质在于理解对象的概念。根据《Java编程思想》第二章的观点,一切皆为对象。本文详细分析了 `Synchronized` 关键字在不同数据类型上的作用机制,特别是对基本数据类型 `int` 和包装类 `Integer` 的区别处理,帮助读者深入理解 Java 中的同步机制及其在多线程环境中的应用。 ... [详细]
  • Shell脚本编译器的全面解析与应用指南 ... [详细]
  • 如何将Python与Excel高效结合:常用操作技巧解析
    本文深入探讨了如何将Python与Excel高效结合,涵盖了一系列实用的操作技巧。文章内容详尽,步骤清晰,注重细节处理,旨在帮助读者掌握Python与Excel之间的无缝对接方法,提升数据处理效率。 ... [详细]
  • 在Java编程中,初始化List集合有多种高效的方法。本文介绍了六种常见的技术,包括使用常规方式、Arrays.asList、Collections.addAll、Java 8的Stream API、双重大括号初始化以及使用List.of。每种方法都有其特定的应用场景和优缺点,开发者可以根据实际需求选择最合适的方式。例如,常规方式通过直接创建ArrayList对象并逐个添加元素,适用于需要动态修改列表的情况;而List.of则提供了一种简洁的不可变列表初始化方式,适合于固定数据集的场景。 ... [详细]
  • 在Python编程中,元组(tuple)是一种不可变的数据结构,相较于列表(list),其使用更加简洁高效。本文详细介绍了元组的基本操作和应用场景,包括创建、访问、切片等常用方法,并探讨了元组在提高代码性能和数据安全方面的优势。通过实例解析,读者可以深入了解元组在实际开发中的应用价值。 ... [详细]
  • 服务器部署中的安全策略实践与优化
    服务器部署中的安全策略实践与优化 ... [详细]
  • Python编程中条件控制下的循环终止机制详解 ... [详细]
  • 在Windows环境下安装Python的dlib和cv2库时,首先需要安装Boost和CMake。由于CMake依赖于C编译器,因此建议安装Visual Studio,推荐版本为VS2015及以上。此外,确保CMake已正确配置到系统环境变量中,以便顺利编译dlib。安装过程中还需注意Python的版本兼容性,以避免潜在的错误。 ... [详细]
  • 提升视觉效果:Unity3D中的HDR与Bloom技术(高动态范围成像与光线散射)
    提升视觉效果:Unity3D中的HDR与Bloom技术(高动态范围成像与光线散射) ... [详细]
  • 为了确保iOS应用能够安全地访问网站数据,本文介绍了如何在Nginx服务器上轻松配置CertBot以实现SSL证书的自动化管理。通过这一过程,可以确保应用始终使用HTTPS协议,从而提升数据传输的安全性和可靠性。文章详细阐述了配置步骤和常见问题的解决方法,帮助读者快速上手并成功部署SSL证书。 ... [详细]
  • 在配置Nginx的SSL证书后,虽然HTTPS访问能够正常工作,但HTTP请求却会遇到400错误。本文详细解析了这一问题,并提供了Nginx配置的具体示例。此外,还深入探讨了DNS服务器证书、SSL证书的申请与安装流程,以及域名注册、查询方法和CDN加速技术的应用,帮助读者全面了解相关技术细节。 ... [详细]
  • Python多线程编程技巧与实战应用详解 ... [详细]
  • 深入解析Android 4.4中的Fence机制及其应用
    在Android 4.4中,Fence机制是处理缓冲区交换和同步问题的关键技术。该机制广泛应用于生产者-消费者模式中,确保了不同组件之间高效、安全的数据传输。通过深入解析Fence机制的工作原理和应用场景,本文探讨了其在系统性能优化和资源管理中的重要作用。 ... [详细]
author-avatar
BBCong
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有