技术标签: java
八进制字符与中文之间的转换
直接上代码:
package com.lof.utils;
import java.io.UnsupportedEncodingException;
import java.nio.charset.StandardCharsets;
/**
*/
public class OctalUtils {
/**
* 八进制转中文
* @param dataStr 八进制字符
* @return
*/
public static String transfromOctalToString(String dataStr) {
if (! dataStr.contains("\\")) {
return dataStr;
}
//不属于八进制内容的字符
StringBuilder oldBuffer = new StringBuilder();
//属于八进制的内容,转成十六进制后缓存在这里
StringBuilder hexBuffer = new StringBuilder();
for (int i = 0; i < dataStr.length(); i ++) {
char c = dataStr.charAt(i);
if (c != '\\') {
oldBuffer.append(c);
}
//反斜杠往后3个为一组,组成了一个八进制数。例如\20710,其实是207组成了一个八进制数
else {
char c1 = dataStr.charAt(i + 1);
char c2 = dataStr.charAt(i + 2);
char c3 = dataStr.charAt(i + 3);
i += 3;
//将八进制转换为十进制,再转换为十六进制
String hex = Integer.toHexString((Integer.valueOf("" + c1 + c2 + c3, 8)));
//先缓存住,直到凑够三个字节
hexBuffer.append(hex);
String hexString = hexBuffer.toString();
//utf8编码中,三个字节为一个汉字
if (hexString.length() == 6) {
//凑够三个字节了,转成汉字后放入oldBuffer中
oldBuffer.append(hexStr2Str(hexString));
//凑够一个汉字了,清空缓存
hexBuffer = new StringBuilder();
}
}
}
return oldBuffer.toString();
}
/**
* 十六进制转换字符串
*/
private static String hexStr2Str(String hexStr) {
String str = "0123456789abcdef";
char[] hexs = hexStr.toCharArray();
byte[] bytes = new byte[hexStr.length() / 2];
int n;
for (int i = 0; i < bytes.length; i++) {
n = str.indexOf(hexs[2 * i]) * 16;
n += str.indexOf(hexs[2 * i + 1]);
bytes[i] = (byte) (n & 0xff);
}
return new String(bytes, StandardCharsets.UTF_8);
}
/**
* 中文转八进制字符
* @param s
* @return
*/
public static String toOct(String s)
{
String result = "";
byte[] bytes = s.getBytes();
for (byte b : bytes)
{
int b1 = b;
if (b1 < 0) {
b1 = 256 + b1;
}
result += "\\" + (b1 / 64) % 8 + "" + (b1 / 8) % 8 + "" + b1 % 8;
}
return result;
}
/**
* 八进制字符转中文
* 只转换并显示属于八进制的字符(\\xxx形式)
* @param s
* @return
*/
public static String getOct(String s) {
String[] as = s.split("\\\\");
byte[] arr = new byte[as.length - 1];
for (int i = 1; i < as.length; i++)
{
int sum = 0;
int base = 64;
for (char c : as[i].toCharArray())
{
sum += base * ((int)c - '0');
base /= 8;
}
if (sum >= 128) {
sum = sum - 256;
}
arr[i - 1] = (byte)sum;
}
String getOctStr = null;
try {
getOctStr = new String(arr, "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return getOctStr; //如果还有乱码,这里编码方式你可以修改下,比如试试看unicode gbk等等
}
public static void main(String[] args) {
//weihushijian5xiaoshi
String s = "\\347\\273\\264\\346\\212\\244\\346\\227\\266\\351\\227\\264" +
"5\\345\\260\\217\\346\\227\\266";//维护时间5小时
System.out.println("transfromOctalToString(s) = " + transfromOctalToString(s));//transfromOctalToString(s) = 维护时间5小时
System.out.println("getOct(s) = " + getOct(s));//getOct(s) = 维护时间小时
System.out.println("toOct(\"小时\") = " + toOct("小时"));//toOct("维护") = \345\260\217\346\227\266
}
}
2021-08-04
附:学习记录,方便查看
let data = [{ "Id": 1, "RegionName": "中国", "Child": [{ "Id": 2, "RegionName": "北京市", "Child": [{ "Id": 3, ...
CST单元-有限元法理论与编程实现有限元法的思想有限元法作是一种数值计算的方法,是一种近似解的求解方式。首先,我们面对的问题通常是这样的一种问题,在对象的微元体中做分析,依据一些物理规律或者力学原理会得出相应的关系式,这种关系式一般会有两种情况,一是得出一个偏微分方程,即研究PDE在边界条件下的解答,也就是边值问题;二是得出一个泛函表达式,在边界条件下去研究问题的极值问题。因此,对于实...
windows xp,数据库oracle 10.2.0。1没有备份,基本上是默认安装,好像还不是归档模式症状:sqlplus只有sysdba用户能进去,其他用户进去一概报:ora-01033:oracle正在初始化或关闭而且sysdba用户进去之后能执行select sysdate from dual,但是执行select usernam from...
需求日期问题测试以下程序:该程序有三个输入变量 month、day、year (month、day 和 year 均为整数值,并且满足:1 ≤ months ≤ 12、1 ≤ days ≤ 31 和 1900 ≤ year ≤ 2050),分别作为输入日期的月份、日、年份,通过程序可以输出该输入日期在日历上隔天的日期。例如,输入为 2004 年 11 月 30 日,则该程序的输出为 2004 年 12 月 1 日。(1) 边界值分析法设计测试用例;(2) 判定表驱动法设计测试用例。实现一、边界值
这里写自定义目录标题引言参考博客Rational Rose介绍引言因软件工程课程需要,此教程带来软件建模工具Rational Rose 2007安装破解教程,经探索整理,与大家共勉参考博客参考博客: https://blog.csdn.net/zml_2015/article/details/50807150.Rational Rose介绍Rational Rose是Rational公...
为什么80%的码农都做不了架构师?>>> ...
栈(stack):概念:栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。栈是允许在同一端进行插入和删除操作的
目录介绍CountDownTimer(倒计时计数器) - 1.1 介绍 - 1.2 参数 - 1.3 公共方法 - 1.4 使用方法 - 1.5 源码分析 - 1.6 synchronized 关键字0.本人写的综合案例 案例 说明及截图 模块:新闻,音乐,视频,图片,唐诗宋词,快递,天气,记事本,阅读器等等 接口:七牛,阿里云,天行,干货集中营,极速数据,追书神器等等1.1介绍
beego orm使用初始化创建新beego项目bee new test在main.go中开始测试模型关系外键始终在子表上#一个用户对应一个简介;一个简介对应一个用户;one2one:User(子表) -> Profile(主表);one2one:Profile -> User#一个邮件对应一个用户;一个用户有多个邮件;one2many:Post(子表) ->...
题意:求满足a^x=b(mod n)的最小的整数x。分析:很多地方写到n是素数的时候可以用Baby step,Giant step, 其实研究过Baby step,Giant step算法以后,你会发现 它能解决 “n与a互质”的情况,而并不是单纯的n是素数的情况。如果a与n不是互质的,那么我们需要处理一下原方程,让a与n互质,然后再用Baby step,Giant step解出x
iview中的i-circle宽度自适应页面部分&lt;i-circle :percent=maintenanceRateCount.nowYearOrderPercentage //控制大小 :size=circleWidth stroke-linecap="square" stroke-color="#2562e9" trail-color="#002251"&...
简介ContentProvider主要用于在不同的应用之间实现数据共享,它提供了一套完整的机制,允许一个程序访问另一个程序中的数据,同时保证数据的安全性。ContentProvider是Android实现跨程序数据共享的标准方式。运行时权限Android权限机制权限申请即在Manifest文件中引入<uses-permission>元素:<manifest xmlns:android="http://schemas.android.com/apk/res/android"