博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
golang 截取指定长度的中英混合字符串无乱码实现
阅读量:2397 次
发布时间:2019-05-10

本文共 644 字,大约阅读时间需要 2 分钟。

网上大部分使用 rune 实现中文无乱码截取,但这种方法适合纯中文字符串,并不适合中英文混合且不知道各多少个的情况。

使用字符的最小存储单元,进行字符类型判定是比较好的解决办法。

代码入下:

func SubstrByByte(str string, length int) string {	bs := []byte(str)[:length]	bl := 0	for i:=len(bs)-1; i>=0; i-- {		switch {		case bs[i] >= 0 && bs[i] <= 127:			return string(bs[:i+1])		case bs[i] >= 128 && bs[i] <= 191:			bl++		case bs[i] >= 192 && bs[i] <= 253:			cl := 0			switch {			case bs[i] & 252 == 252:				cl = 6			case bs[i] & 248 == 248:				cl = 5			case bs[i] & 240 == 240:				cl = 4			case bs[i] & 224 == 224:				cl = 3			default:				cl = 2			}			if bl+1 == cl {				return string(bs[:i+cl])			}			return string(bs[:i])		}	}	return ""}

 

转载地址:http://eafob.baihongyu.com/

你可能感兴趣的文章
推荐今天在看的一些文章和小收获
查看>>
又一个轮回(r14笔记第100天)
查看>>
几类历史数据沉淀的方案过渡
查看>>
推荐几个不错的Python资源
查看>>
Java微服务应用测试,走起
查看>>
运维中的接入管理梳理
查看>>
go语言学习初体验
查看>>
儿童世界的一点解读
查看>>
MySQL中的自增列
查看>>
Python实现工厂模式的两个例子
查看>>
逻辑,问题到底在哪里?
查看>>
不要做”积极废人”
查看>>
两个看似奇怪的MySQL语句问题
查看>>
通过shell脚本检测MySQL服务信息
查看>>
Greenplum集群部署小记
查看>>
通过java画文本格式的统计图
查看>>
MySQL存储过程的权限问题
查看>>
大分区表的手工并行优化
查看>>
从“悲剧”的几个运维场景谈谈运维开发的痛点
查看>>
运维工作中几点深刻的经验和教训
查看>>