首页 文章 精选 留言 我的

精选列表

搜索[数据类型],共7214篇文章
优秀的个人博客,低调大师

Python学习笔记 (2.2)Python中的字符编码问题及标准数据类型之String(字符串)

Python3中的String类型 首先,Python中没有字符类型,只有字符串类型。单个字符按照长度为1的字符串处理,这对于曾是OIER的我来说有点不适应啊。 字符串的表示方法 最常用的就是用一对双引号或一对单引号把一串字符括起来,像这样'Hello world!'或"Hello world!"。这两种表示方法可以说完全一样,没啥区别。这两种完全一样的东西存在的目的貌似只有一个,如果字符串中含有一个单引号,就要用双引号括起来,避免单引号匹配不起来,像这样"I'm fine."而不是这样'I'm fine.',可以看到,第二种情况下,解释器就无法正确识别我们想要的字符串。再加一个相似的例子:'"Why," he said.'和""Why," he said." 字符编码 参考资料:字符串和编码-廖雪峰的官方网站 众所周知,计算机要处理字符,是通过字符编码。美国人发明了计算机,然后制定了由一个字节表示一个字符的ASCII编码,只有英文字母、数字、标点和一些控制字符,总共127个。 但是这对其他语言来说就很不友好,因为放不下自己语言的字啊。于是各国都制定了自己的编码标准,比如中国的GB2312(国标2312)、GBK(国标扩),日本的Shift_JIS,等等。各国标准不同,就会出现冲突(乱码)。 于是就产生了国际通用的编码标准Unicode(点我看Unicode),发展到如今,大多数由两个字节表示一个字,也有要4个字节的。它包括了全世界差不多所有字符。至于原来就在ASCII中的字符,在编码前面补零就好。 但由于“补零”的存在,如果大部分是英文,Unicode储存时要耗费差不多两倍空间,于是储存时由Unicode转换为可变长编码的UTF-8以节约空间(1~6个字节表示一个字,中文大多是3字节),再次打开时,再转换回Unicode(Windows XP的记事本是这样的,win7记事本保存时就可以自己选编码方式了),网页也有这类似的应用。 总结一下:计算机要处理非英文的字符,就要使用其他字符编码,如要处理中文,就要使用GB2312(只支持中文、英文)或Unicode、UTF-8(支持所有语言)。 Ps:GBK和UTF-8并不兼容,于是在我刚开始折腾Ubuntu16.04时,发现在里面预装的rhythmbox中,我的音乐标题全是乱码,百度一下,在Ubuntu下处理好了,等重启回到win7时,win7又显示乱码了,解决方案:在Ubuntu下使用网易云音乐。还有当年去福建长乐一中集训,由于编码方式不兼容,我Ubuntu的文件用ftp传到他们那里,文件名只会显示乱码,导致我第一天没有成绩,解决方案:用Windows或Ubuntu下的ftp软件 Python3中的String(字符串)类型编码方式及其应用 python3中,字符串类型默认使用Unicode,直接可以处理中文了,不像Python2,默认ASCII,要处理中文还要手动UTF-8。如果要更改编码方式,比如希望使用GBK,那么要加一行注释( 叫做编码声明 ) # -*- coding: gbk -*- 或#coding=gbk (等号前后不能有空格),要放在第一行,如果第一行已经有了解析路径(#!/usr/bin/python3),那编码声明就要放在第二行。关于编码声明更详细的官方解释。再次强调,Unicode/UTF-8不与GBK兼容浣犲ソ锛屼笘鐣岋紒。

优秀的个人博客,低调大师

dbVisitor 统一数据库访问库,更新 v6.2.0,对 Redis 5 大数据类型操作更加丝滑

dbVisitor 数据库数据库访问库,提供 Java 对多种不同类型数据库统一访问。让数据的读写更加自然。 dbVisitor 是建立在 JDBC 基础之上,它改进了 JDBC 低级接口提供更加自然的 API。主要包含如下三个部分: dbvisitor,是核心模块,提供统一的数据库访问 API。 dbvisitor-adapter,是 JDBC 驱动适配器集合,目的是使不具备 JDBC Driver 的数据库可以用过 JDBC 接口访问。支持Redis、MongoDB 等非关系型数据库。 dbvisitor-integration,是 dbVisitor 与主流框架的集成模块。支持 Spring、SpringBoot、Solon、Hasor、Guice 等主流框架。 dbVisitor 是方便 Java 访问数据库的库,虽然有些类似 ORM 但和真正意义上的 ORM 理念比起来还是有很多不同点。 dbVisitor 是简单的,它专注数据库的访问。任何带有具体业务含义的特定功能都不属于 dbVisitor 范畴。尽管如此你仍然可以利用 dbVisitor 巧妙的设计来满足特定业务的需要。 为什么使用它? 过去关系型数据库占主导时,数据访问手段已趋多样并且涌现了大量基于 JDBC 的成熟工具;但随着非关系型数据库兴起,数据存储形式更加多元访问 API 也变得更加复杂。开发者需要在不同的 API 之间切换,增加了学习成本和使用难度。 而已有的数据访问技术如 Hibernate、MyBatis、Spring JDBC 以及 ActiveRecord、QueryWrapper、Row、Chain、JPA 等主要针对关系型数据库,在面对日益多样的非关系型存储时显现出局限性。 dbVisitor 的核心突破在于访问模式的无缝集成:开发者可以在同一项目中混合使用多种访问范式,并在关系型与非关系型存储之间获得统一体验。 借助 drivers 模块,dbVisitor 已不再局限于通过 JDBC 访问关系型数据库,而是通过适配器支持例如Redis、MongoDB 等非关系型数据库。 在设计上,dbVisitor 提供了与 JdbcTemplate、MyBatis 近似风格的 API,这种设计可以让开发者避免接受大量新的概念和知识,从而减少学习成本和使用难度。 影响范围 JdbcOperations 接口和 JdbcTemplate 类 dbvisitor-driver 项目 jdbc-redis 驱动 更新内容 新增 在Mapper 注解化、Mapper File、JdbcTemplate级别 API 上适配 jdbc-redis 驱动。 恢复 5.x 版本中的 BindTypeHandler 注解。 XmlMapper 和 Query 注解,添加 resultTypeHandler 属性可以配置 TypeHandler TypeHandlerColumnRowMapper 可以将 TypeHandler 作为 RowMapper 使用。 jdbc-redis 驱动新支持 PING、ECHO、SELECT、INFO 命令。 对于 DataGrip 和 IDEA 内嵌 Database 插件中使用 jdbc-redis 驱动连接 Redis 的支持。 ResultSetExtractor 接口新增 PairsResultSetExtractor 实现,用于将结果集转换为键值对集合。 JdbcOperations/JdbcTemplate 新增三个 queryForPairs 方法,可以将查询结果的每一行数据都转换为一个键值对。 新的 pairs 规则,用于遍历 Map/List/Array 等集合类型,并使用固定模版生成查询条件。 变更 queryForLong 方法返回值类型从 long 变更为 Long。 queryForInt 方法返回值类型从 int 变更为 Integer。 AbstractRowMapper 类的 getResultSetTypeHandler(ResultSet, int, Class) 方法移动到 TypeHandlerRegistry 类中。 jdbc-redis 驱动在执行 MSET/MSETNX 命令时,返回值为添加的 Key 数量(此之前始终返回 1) jdbc-redis 驱动中涉及 StoreSet 类型的相关命令在同时输出 SCORE、ELEMENT 字段时,结果集字段顺序调整为 ELEMENT、SCORE。具体命令有: ZPOPMAX、ZPOPMIN、ZDIFF、ZINTER、ZRANDMEMBER、ZRANGE、ZRANGEBYSCORE、ZREVRANGE、ZREVRANGEBYSCORE、ZUNION、ZMPOP、BZMPOP、BZPOPMAX、BZPOPMIN、ZSCAN 优化 jdbc-redis 驱动支持 ResultSet 的 isLast 方法。 对于部分命令在执行完毕后通过使用 updateCount 方法返回执行结果,这些命令有: HKEYS、HDEL、DEL、SET、HSET、HMSET、HSETNX、EXPIRE、EXPIREAT、PEXPIRE、PEXPIREAT、PERSIST、RENAME、RENAMENX、 TOUCH、LINSERT、LPUSH、LPUSHX、RPUSH、RPUSHX、LREM、LSET、LTRIM、MOVE、SADD、SDIFFSTORE、SINTERSTORE、SMOVE、 SREM、SUNIONSTORE、ZDIFFSTORE、ZINTERSTORE、ZRANGESTORE、ZREM、ZREMRANGEBYLEX、ZREMRANGEBYRANK、ZREMRANGEBYSCORE、 ZUNIONSTORE、MSET、MSETNX、PSETEX、SETEX、SETNX、SETRANGE 对于 antlr4 的依赖,内嵌到 jdbc-redis 驱动 jar 包中,以减少外部依赖。 优化 jdbc-redis 驱动报错信息。 dbvisitor-driver 中的 ConvertUtils 在处理 toBytes 时兼容 Byte[] 类型。 修复 jdbc-redis 驱动中 Statement 的 getLargeUpdateCount 和 getUpdateCount 没有结果集时会抛出 SQLException 的问题。保持和 jdbc 描述一致,在没有更多结果时返回 -1。 jdbc-redis 驱动中 keys 命令无法执行的问题。 queryForPairs 作用 使用 JdbcTemplate 查询键值对 // 查询用户表,将用户 ID 和用户名作为 Map 返回 Map<Long, String> userMap = jdbc.queryForPairs("select uid, name from user", Long.class, String.class); Redis 兼容如何使用? 使用 JdbcTemplate 存取对象 // 1. 使用 BindTypeHandler 注释标记 UserInfo 类,指定使用 JsonTypeHandler 来处理该类的序列化和反序列化 @BindTypeHandler(JsonTypeHandler.class) public class UserInfo { ... } // 2. 获取 Redis 连接,并构建 JdbcTemplate Connection redisConn = ...; // 参考文档:驱动适配器 > JDBC Redis > 如何使用 JdbcTemplate jdbc = new JdbcTemplate(redisConn); // 3. 创建 UserInfo 对象,将其插入到 Redis 中,并使用 Json 序列化存储 UserInfo user = new UserInfo(); user.setUid("j1111"); user.setName("username"); user.setLoginName("login_123"); user.setLoginPassword("password"); // 4. 使用 user_ + uid 作为键名,arg0 为 user 对象 int affected = jdbc.executeUpdate("set #{'user_' + arg0.uid} #{arg0}", user); // 5. 从 Redis 中查询 UserInfo 对象,并进行反序列化 UserInfo info = jdbc.queryForObject("get #{'user_' + arg0}", "j1111", UserInfo.class); // 6. 删除 Redis 中的 UserInfo 对象 int deleteCount = jdbc.executeUpdate("del #{'user_' + arg0.uid}", user); 使用 Mapper 注解存取对象 // 1. 使用 BindTypeHandler 注释标记 UserInfo 类,指定使用 JsonTypeHandler 来处理该类的序列化和反序列化 @BindTypeHandler(JsonTypeHandler.class) public class UserInfo { ... } @SimpleMapper() public interface UserInfo1Mapper { // 1. 生成参数化命令:set ? ? // 2. 决定键名: #{'user_' + info.uid} // 3. 键的值: #{info} @Insert("set #{'user_' + info.uid} #{info}") int saveUser(@Param("info") UserInfo info); // 1. 生成参数化命令:get ? // 2. 决定键名: #{'user_' + uid} @Query("get #{'user_' + uid}") UserInfo loadUser(@Param("uid") String uid); // 1. 生成参数化命令:del ? // 2. 决定键名: #{'user_' + uid} @Delete("del #{'user_' + uid}") int deleteUser(@Param("uid") String uid); } 使用 Mapper File 管理命令(Mapper) @RefMapper("dbvisitor_scene/redis/user-mapper.xml") public interface UserInfoMapper { int saveUser(@Param("info") UserInfo info); UserInfo loadUser1(@Param("uid") String uid); UserInfo loadUser2(@Param("uid") String uid); int deleteUser(@Param("uid") String uid); } 使用 Mapper File 管理命令(Mapper File) <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//dbvisitor.net//DTD Mapper 1.0//EN" "https://www.dbvisitor.net/schema/dbvisitor-mapper.dtd"> <mapper namespace="net.hasor.scene.UserInfoMapper"> <insert id="saveUser"> set #{'user_' + uid} #{info} </insert> <select id="loadUser" resultType="net.hasor.scene.UserInfo"> get #{'user_' + uid} </select> <delete id="deleteUser"> del #{'user_' + uid} </delete> </mapper>

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册