精华内容
下载资源
问答
  • 开发过程总是会碰到string, unicode, ASCII, 中文字符等编码的问题, 每次碰到都要现搜, 很是浪费时间, 于是这次狠下心, 一定要搞清楚python 的string和Unicode到底怎么回事.基础知识我们都知道计算机只认0和1, 要...

    python unicode 和string那📺

    开发过程中总是会碰到string, unicode, ASCII, 中文字符等编码的问题, 每次碰到都要现搜, 很是浪费时间, 于是这次狠下心, 一定要搞清楚python 的string和Unicode到底怎么回事.

    基础知识

    我们都知道计算机只认0和1, 要想在计算机显示26个字母, 就要给他们一套映射规则: 计算机能认得的符号 --> 人类可读的符号. 这转换的过程就是一套编码规则.

    字符集: 就是一套字符的集合(比如中文4000个汉字集合)

    字符编码: 一套法则, 能够将0/1和人类的语言之间进行转换的法则

    最初字符集比较少, ASCII 码就够用了(一些控制符和26个字母), 随着计算机的发展, 各国语言都有自己独特的编码, 汉字的编码也不断地扩展, 从GBK到 GB18030/DBCS. 这个时候Unicode应运而生.

    Unicode就是为了统一各国各地区的编码规则, 重新搞了一套包罗地球上所有文化, 符号的字符集! Unicode没有编码规则, 只是一套包含全世界符号的字符集. Unicode也不完美, 于是后续有了众多UTF编码(UTF-8, UTF-16).

    总之搞清楚一件事情, 一个字符用了UTF-8编码的, 就要用UTF-8去解码, 不然就会出现乱码.

    文本处理

    在python-2.x, 处理文本时, 有string和unicode两种类型

    str类型就是一串bytes, 这种类型跟C语言中处理string是非常相似的

    unicode就是一串unicode的数字映射(code point), 用于映射某个字符与一个unicode的对应关系.

    看看代码出来是如何的:

    从上面的代码可以看到, a = "简书"是string类型, 可以看到a是一串 '\xe7\xae\x80\xe4\xb9\xa6' byte字符, 而u = u"简书"是一串\uxxxx的unicode数字, 通过print a 和 print u可以显示出中文字符.

    常见问题#1

    大家经常犯的一个错误就是混淆了unicode以及通过unicode编码存储在string里面的类型.

    比如上面的例子中 u'\u7b80' 是unicode, '\xe7\xae\x80'是byte string, byte和unicode之间一一对应, 可以相互转换, 转换规则如下:

    总结一下, 上面例子中

    unicode和byte都指简

    byte string 里面存储的是unicode通过utf-8编码后得到的bytes

    所以byte string解码(decode)后即可得到unicode

    unicode是byte string通过utf-8解码后得到的

    unicode用utf-8编码(encode)可以得到对应的bytes

    Unicode就像是加密传输中的明文, 可以用UTF-8, UTF-16, UTF-7, UTF-32等对unicode进行加密, 最后解密还是要用回原本的加密方式来解密, 不然就解出乱码啦.

    常见问题#2

    对unicode或者byte string编码解码方向搞错

    unicode应该是进行编码的, 如果进行decode, 是会出现UnicodeEncodeError 异常的. bytes string同理, 应该进行解码, 如果硬要进行编码的话, 则抛出UnicodeDecodeError

    常见问题#3

    API调用不一致的问题. 在调用别人的API的时候, 需要看清楚是传unicode还是byte string作为参数. 因为第三方的API有的是支持unicode, 有的是byte string, 甚至有的两种类型都支持. 这个时候要清楚自己传进去的参数是什么, 比如一些变量值是从http requests里面拉过来的, 这个时候你获得的变量值很有可能是unicode类型(python requests get/post把返回值都转成了unicode), 而如果第三方的API需要byte string, name就需要自己判断一下并进行转换. 否则就会出现各种奇怪的UnicodeError

    虽然python 社区规定了在所有的API中使用unicode, 但是少数一部分的API处于安全考虑还是要求使用byte string. 需要注意一下.

    常见问题#4

    输出类型不一致.

    既然python社区推动到处使用unicode, 那么我们只要在开发过程中全部都转成unicode是不是就万事大吉了? 并不是, 当你要输出文本到terminal或者到文件, 这个文本必须是byte string类型的.

    如果不是的话, python会隐式地帮你将unicode转成string, python默认采用ascii编码,而中文编码不在ascii编码能够表示的范围之内,所以string无法将“你好”作为ascii编码保存为str类型。

    所以当你需要输出的时候, 需要将你的unicode转换成byte string再写文件, 如果有中文的话, 要用'utf-8'或'GBK'等支持中文的编码.

    python 2.x的unicode & str其实搞清楚之后来来回回就是那些小问题, 希望对大家有帮助.

    ================================================================================================================================================

    一、

    在爬虫抓取网页信息时常需要将类似"\u4eba\u751f\u82e6\u77ed\uff0cpy\u662f\u5cb8"转换为中文,实际上这是unicode的中文编码。可用以下方法转换:

    1、

    1 >>> s = u'\u4eba\u751f\u82e6\u77ed\uff0cpy\u662f\u5cb8'

    2 >>> print s

    3 人生苦短,py是岸

    2、

    1 >>> s = r'\u4eba\u751f\u82e6\u77ed\uff0cpy\u662f\u5cb8'

    2 >>> s = s.decode('unicode_escape')

    3 >>> print s

    4 人生苦短,py是岸

    二、

    另外,在python2的字符编码问题时常会遇到“UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-5: ordinal not in range(128)”的编码错误。

    而用以下方法通常可以解决:

    1 import sys

    2 reload(sys)

    3 sys.setdefaultencoding('utf-8')

    此方法是将Python2的默认编码ASCII改为 utf-8。但此方法不是一劳永逸的,可能会使一些代码的行为变得怪异。

    展开全文
  • java年月日中文

    千次阅读 2021-03-04 05:02:07
    记录java中年月日中文的方式,手动,没有引用额外的jar包package com.lz.controller.report;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;public class TestPYTHON ...

    记录java中年月日转中文的方式,手动,没有引用额外的jar包

    package com.lz.controller.report;

    import java.text.ParseException;

    import java.text.SimpleDateFormat;

    import java.util.Date;

    public class TestPYTHON {

    public static void main(String[] args) throws Exception {

    String chineseDate = "";

    String d = "2018-8-2";

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

    Date da = sdf.parse(d);

    System.out.println(da);

    // String datestr = sdf.format(new Date());

    String datestr = sdf.format(da);

    System.out.println(datestr);

    String[] strs = datestr.split("-");

    // 年

    for (int i = 0; i < strs[0].length(); i++) {

    chineseDate += formatDigit(strs[0].charAt(i));

    }

    // chineseDate = chineseDate+"年";

    // 月

    char c1 = strs[1].charAt(0);

    char c2 = strs[1].charAt(1);

    String newmonth = "";

    if (c1 == '0') {

    newmonth = String.valueOf(formatDigit(c2));

    } else if (c1 == '1' && c2 == '0') {

    newmonth = "十";

    } else if (c1 == '1' && c2 != '0') {

    newmonth = "十" + formatDigit(c2);

    }

    chineseDate = chineseDate + "年" + newmonth + "月";

    // 日

    char d1 = strs[2].charAt(0);

    char d2 = strs[2].charAt(1);

    String newday = "";

    if (d1 == '0') {//单位数天

    newday = String.valueOf(formatDigit(d2));

    } else if (d1 != '1' && d2 == '0') {//几十

    newday = String.valueOf(formatDigit(d1)) + "十";

    } else if (d1 != '1' && d2 != '0') {//几十几

    newday = formatDigit(d1) + "十" + formatDigit(d2);

    } else if (d1 == '1' && d2 != '0') {//十几

    newday = "十" + formatDigit(d2);

    } else {//10

    newday = "十";

    }

    chineseDate = chineseDate + newday + "日";

    System.out.println(chineseDate);

    }

    public static char formatDigit(char sign) {

    if (sign == '0')

    sign = '〇';

    if (sign == '1')

    sign = '一';

    if (sign == '2')

    sign = '二';

    if (sign == '3')

    sign = '三';

    if (sign == '4')

    sign = '四';

    if (sign == '5')

    sign = '五';

    if (sign == '6')

    sign = '六';

    if (sign == '7')

    sign = '七';

    if (sign == '8')

    sign = '八';

    if (sign == '9')

    sign = '九';

    return sign;

    }

    }

    参考

    展开全文
  • javaObjectString

    千次阅读 2021-03-14 11:14:50
    Object转为String的几种形式在java项目的实际开发和应用,常常需要用到将对象转为String这一基本功能。本文将对常用的转换方法进行一个总结。常用的方法有Object.toString(),(String)要转换的对象,String.value...

    Object转为String的几种形式

    在java项目的实际开发和应用中,常常需要用到将对象转为String这一基本功能。本文将对常用的转换方法进行一个总结。常用的方法有Object.toString(),(String)要转换的对象,String.valueOf(Object)等。下面对这些方法一一进行分析。

    方法1:采用 Object.toString()方法

    请看下面的例子:

    Object object = getObject();

    System.out.println(object.toString());

    在这种使用方法中,因为java.lang.Object类里已有public方法.toString(),所以对任何严格意义上的java对象都可以调用此方法。但在使用时要注意,必须保证object不是null值,否则将抛出NullPointerException异常。采用这种方法时,通常派生类会覆盖Object里的toString()方法。

    方法2:采用类型转换(String)object方法

    这是标准的类型转换,将object转成String类型的值。使用这种方法时,需要注意的是类型必须能转成String类型。因此最好用instanceof做个类型检查,以判断是否可以转换。否则容易抛出CalssCastException异常。此外,需特别小心的是因定义为Object 类型的对象在转成String时语法检查并不会报错,这将可能导致潜在的错误存在。这时要格外小心。如:

    Object obj = new Integer(100);

    String strVal = (String)obj;

    在运行时将会出错,因为将Integer类型强制转换为String类型,无法通过。但是,

    Integer obj = new Integer(100);

    String strVal = (String)obj;

    如是格式代码,将会报语法错误。

    此外,因null值可以强制转换为任何java类类型,(String)null也是合法的。

    方法3:采用String.valueOf(Object)

    String.valueOf(Object)的基础是Object.toString()。但它与Object.toString()又有所不同。在前面方法1的分析中提到,使用第一种时需保证不为null。但采用第三种方法时,将不用担心object是否为null值这一问题。为了便于说明问题,我们来分析一下相关的源代码。Jdk里String.valueOf(Object)源码如下:

    /**

    * Returns the string representation of the Object argument.

    *

    * @param  obj  an Object.

    * @return if the argument is null, then a string equal to

    *     "null"; otherwise, the value of

    *     obj.toString() is returned.

    * @see   java.lang.Object.toString()

    */

    public static String valueOf(Object obj) {

    return (obj == null) ? "null" : obj.toString();

    }

    从上面的源码可以很清晰的看出null值不用担心的理由。但是,这也恰恰给了我们隐患。我们应当注意到,当object为null时,String.valueOf(object)的值是字符串"null",而不是null!在使用过程中切记要注意。试想一下,如果我们用

    if(String.valueOf(object)==null)

    {

    System.out.println(“传入的值是null!");

    }

    这样的语句将可能会发生什么问题。再想一下,向控制台输出时,在视觉上如下语句在执行的结果上有什么不同:

    System.out.println(String.valueOf(null));

    System.out.println(null);

    我们看到的输出将是一模一样的东西:null,但它们意义相同吗?

    判断一个字符串为空

    s为一个字符串,判断它为空的方法:

    if (null==s ||"".equals(s)) {

    ......

    }

    注意:这里的null==s和"".equals(s)不要写成s==null和s.equals(s),因为""这个值是已经确定的,预知的,而s是未知的,所以用得不小心的时候s.equals("")就会出现nullpoint异常。在这里虽然不会,因为前面有if(null==s),但是习惯跟在那里使用没有关系的。不一定的equals方法,包括其它很多处理,如果用确定的值处理问题会比未确定的处理少很多bug。

    展开全文
  • 这里还有一个细节需要注意,即从字节到字符转换时,不难想象当读取到一个byte小于128时候,直接英文。当大于128时,因为是GBK编码,所以需要两个连续的字节。 java编码格式相互转换,还是比较麻烦的,我到现在...

    最近遇到一个问题,我用java写了一个客户端通过socket向服务器端发送消息,发送的内容是字节流,编码格式是GBK,服务器在收到消息后,如果格式正确,会返回固定的消息格式,同样也是字节流,编码格式也是GBK。

    现在问题来了,我怎么把字节流转换为字符流,当然是要能显示出中文。于是上网搜了一下,找到一篇博客,网址如下:http://bbs.csdn.net/topics/391939108,代码如下:

    import java.nio.charset.Charset;

    import java.nio.ByteBuffer;

    import java.nio.CharBuffer;

    public class Test{

    public static void main(String[] args){

    String content = "Hello World.你好世界.";

    byte[] bs = content.getBytes();

    Charset charset = Charset.defaultCharset();

    ByteBuffer buf = ByteBuffer.wrap(bs);

    CharBuffer cBuf = charset.decode(buf);

    System.out.println(cBuf.toString());

    }

    }

    从代码不难看出,主要是通过ByteBuffer和CharBuffer相互转换,转换之前需要设置字符的编码格式,因为我是在中文Windows下开发,所以默认的编码格式是GBK,如果你想要设置自己的编码格式,可以调用Charset的forName函数,参数即编码格式。

    这里还有一个细节需要注意,即从字节到字符转换时,不难想象当读取到一个byte小于128时候,直接转英文。当大于128时,因为是GBK编码,所以需要两个连续的字节。

    java中编码格式相互转换,还是比较麻烦的,我到现在也不是很清楚,只能遇到问题一点点解决。

    展开全文
  • Python编码问题:u'\xe6\x97\xa0\xe5\x90\x8d' 类型的转为utf-8的解决办法相信小伙伴们遇到过类似这样的问题,python2各种头疼的转码,类似u'\xe6\x97\xa0\xe5\x90\x8d' 的编码,直接s.decode()是无法解决编码...
  • excel操作系列中文姓名英文姓名

    千次阅读 2021-04-01 09:58:15
    excel操作系列中文姓名英文姓名 最近接到求助,需要将 excel 表格的英文姓名转为中文姓名,本来想通过技术的方式写一个可以转化英文姓名的程序,但是考虑到时间紧迫性,先写目前可以解决的方式,后续有时间...
  • C语言字母大小写转换的简单操作

    千次阅读 2021-05-18 09:32:27
    而在C语言开发,我们经常会遇到这样或者那样的问题,别着急,爱站技术频道为你细细道来C语言字母大小写转换的简单操作。C语言tolower()函数:将大写字母转换为小写字母头文件:#include定义函数:int toupper...
  • SAS日期转换全攻略

    千次阅读 2020-12-28 20:55:38
    ()在SAS处理,特别是在多个数据集合并过程,我们经常要遇到 日期格式不匹配的情况,但是 日期 又是一个非常关键的匹配关键词,所以有必要 将各种不同的 日期变量的 转化 方法在这里做一个总结,不周到处请...
  • javastringbigdecimal的例子

    千次阅读 2021-02-25 19:40:15
    小编知道在java数据类型非常 的严格了,我们如果一个地方不小心就会导致应用出问题了,今天 小编就在string BigDecimal上碰到了一些问题,下面整理了几个例子大家一起来看看。例子1,string BigDecimalpublic ...
  • arcgistif成shp

    千次阅读 2021-03-07 04:56:02
    11页 1下载券 mapgis转换成SHP格式 3页 免费 Mapgi......ArcGIS 80 2000 坐标的便捷方法-可用于简单查看 1、数据准备:同一区域范围的已有的 80 坐标系(以下简称 80.shp)与 2000 坐标系两...
  • java集合:set与list相互转换

    千次阅读 2021-03-09 19:09:35
    1、set成list:(两种方法)Setset = new HashSet();set.add("c");set.add("d");set.add("a");set.add("a");//方法一:Listlist = new ArrayList(set);for(Strings : list) {System.out.println(s);}System.out....
  • Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件...有些用户还不会对eclipse进行英文切换,那么eclipse英文中文怎么设置呢?下文给大家介绍一...
  • 最近项目中用到金额大写的地方,正好项目引用了hutool包,发现里面正好有这个功能 工具类: cn.hutool.core.convert.Convert#digitToChinese /** * 金额转为中文形式 * * @param n 数字 * @return ...
  • 中国基金报 FactorConfigDaoImpl :目前获取到的map的key: 87,获取到的value是:盖世汽车,盖世汽车快讯,中国汽车工业信息网 FactorConfigDaoImpl :目前获取到的map的key: 88,获取到的value是:机床商务网,钢网,...
  • c语言将字符串的小写字母转换成大写字母描述给定一个字符串,将其中所有的小写字母转换成大写字母。输入输入一行,包含一个字符串(长度不超过100,可能包含空格)。输出输出转换后的字符串。样例输入helloworld123...
  • JS和vue日期格式的转换

    千次阅读 2020-12-22 11:48:08
    :SpringMVC日期格式的转换 解决日期提交转换异常的问题 由于日期数据有很多种格式,所以springmvc没办法把字符串转换成日期类型.所以需要自定义参数绑定.前端控制器接收到请求后,找到注解形式的处理器适配器,对...
  • oracle如何将varchar型转换成int型

    千次阅读 2021-02-08 21:28:50
    展开全部这样:select to_number('123') from dualoracle没有显示的INT型,你直接定义成number就好,强制类型转换函数都差不多,转换为e69da5e6...转换为数字就是TO_NUM(),转换为字符就是TO_CHAR(),括号中跟需要...
  • Python3数字进制转换

    千次阅读 2020-12-29 05:36:55
    Python数字进制默认为十进制,可通过内置函数转换为二进制、八进制、十六进制十进制整数其他进制1. 十进制二进制:设 num1 为123,通过 type( ) 可以看到类型为 int使用 bin( ) 函数将 num1 转换为二进制,...
  • js把数字转换成汉字输出

    千次阅读 多人点赞 2021-02-23 11:02:23
    在js把数字转换成汉字输出的方法,直接可以拿来用 /** * 数字成汉字 * @params num === 要转换的数字 * @return 汉字 * */ toChinesNum(num) { let changeNum = ['零', '一', '二', '三', '四', '五',...
  • 法二、使用Sql的DATEDIFF函数 使用方法:DATEDIFF ( datepart , startdate , enddate ) 它能帮你取出你想要的各种形式的时间差,如相隔多少天,多少小时,多少分钟等,具体格式如下: 日期部分 缩写 year yy, ...
  • javaGBKUTF-8乱码如何解决

    千次阅读 2021-02-12 21:30:30
    javaGBKUTF-8乱码如何解决发布时间:2020-04-29 09:25:25来源:亿速云阅读:960作者:小新今天小编给大家分享的是javaGBKUTF-8乱码如何解决,相信很多人都不太了解,为了让大家更加了解GBKUTF-8乱码的解决...
  • js实现中文数字阿拉伯数字

    万次阅读 2021-06-29 16:34:37
    var map = { "零": 0, "一": 1, "壹": 1, "二": 2, "贰": 2, "两": 2, "三": 3, "叁": 3, "四": 4, "肆": 4, "五": 5, "伍": 5, "六": 6, "陆": 6, "七":.
  • java写文件操作是可以使用FileOutputStream()和FileWriter()两种方法,但是两种方法产生的结果却不同。 方法一:使用FileOutputStream(),每次程序运行后会产生一个新的文件,如果这个新的文件在相同目录下已经有...
  • js如何将String类型转换成double?

    千次阅读 2021-01-14 16:34:46
    String a=request.getParameter(... 也就是把“”去掉,qprive这些都是保存double类型的变量吧,你加上引号就都变成string字符串了,所以出错 ◆◆ 评论读取.... 请登录后再发表评论! ◆◆ 修改失败,请稍后尝试
  • 在Java从double转换为float

    千次阅读 2021-03-01 07:35:11
    我建议浮点类型最有效地被视为表示值的...例如,如果将一个0.1f转换为double,则得到的double将表示0.10000000149011611到0.10000000149011613范围内的数字,即使它应该代表的数字(十分一)相对来说也不在该范围附近。
  • MySQL字符串的大小写转换详解

    千次阅读 2021-01-18 19:09:15
    +--------------+| ucase('ddd') |+--------------+| DDD |+--------------+ 通常情况下,我选择 lower(), upper() 来转换字符串大小写,因为这和其他数据库函数相兼容。 清除字符串首尾空格 MySQL 的清除...
  • DB2时间型字段的转换

    千次阅读 2021-01-17 15:57:49
    I want to convert a Date column to a formatted string in DB2. This SQL works fine:select varchar_format(current timestamp, 'YYYY-MM')from sysibm.sysdummy1;but this SQL gives an error:select varchar_fo...
  • 注: 字串成 Double, Float, Long 的方法大同小异. 2 如何将整数 int 转换成字串 String ? A. 有叁种方法: 1.) String s = String.valueOf(i); 2.) String s = Integer.toString(i); 3.) String s = "" + i; 注: ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,885,116
精华内容 2,754,046
关键字:

中阿之转