文字 编码 正则表达式 切换

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文字 编码 正则表达式 切换相关的知识,希望对你有一定的参考价值。

请问这样的 "\u5B8B\u4F53,\u65B0\u5B8B\u4F53" 是什么格式?
如何转换成对应的汉字,汉字又如何转换成这种编码?
谢谢

这样的写法像是正则表达式,用来以unicode编码表示“宋体新宋体”这五个汉字。

转码方法很多,下载一份unicode码表肉眼去看可以,编个程序转换也行,另外推荐如下两个办法:
1、下载一个叫做codeview.exe的小工具,在其UTF16-BE编码中输入5B8B4F5365B05B8B4F53(不要\u),即可在文本串中看到那五个对应的汉字
2、打开word,逐一选中4个十六进制字符串,如5B8B、4F53、65B0等,按组合键ALT+X,即可将unicode编码转为汉字,再按ALT+X,将转换回来。
参考技术A 这应该是unicode编码。你是用何种编程语言进行转换呢?或者上网去unicode网站去查询对应字符。 参考技术B 参考技术C 你这样谁看的懂啊 你的说是什么转码

16JS切换字母大小写

JS切换字母大小写

  • 输入一个字符串,切换其中字母的大小写
  • 如:12aBc34, 输出:12AbC34

常见思路

  • 正则表达式匹配
  • ASCII编码匹配

代码实现

  • 正则表达式
export function switchLetterCase1 (str:string):string 
  let res = ''
  const len = str.length
  if(len === 0) return res

  const reg1 = /[a-z]/
  const reg2 = /[A-Z]/

  for (let i = 0; i < len; i++) 

    const c = str[i]
    if (reg1.test(c)) 
      res += c.toUpperCase()
     else if (reg2.test(c))
      res += c.toLowerCase()
     else 
      res += c
    
  

  return res

  • ASCII 码方式
export function switchLetterCase2 (str:string):string 
  let res = ''
  const len = str.length
  if(len === 0) return res

  for (let i = 0; i < len; i++) 
    
    const c = str[i]
    const code = c.charCodeAt(0)

    if (code >= 97 && code <= 122) 
      res += c.toUpperCase()
     else if (code >= 65 && code <= 90)
      res += c.toLowerCase()
     else 
      res += c
    
  

  return res

功能测试

const s = '12aBc34'
switchLetterCase1(s)
switchLetterCase2(s)

打印结果

12AbC34
12AbC34

单元测试

describe('字母大小写切换',() => 
  it('正常情况', () => 
    const s = '12aBc34'
    expect(switchLetterCase1(s)).toBe('12AbC34')
    expect(switchLetterCase2(s)).toBe('12AbC34')
  )

  it('空字符串', () => 
    expect(switchLetterCase1('')).toBe('')
    expect(switchLetterCase2('')).toBe('')
  )

  it('非字母', () => 
    expect(switchLetterCase1('121215你好')).toBe('121215你好')
    expect(switchLetterCase2('121215你好')).toBe('121215你好')
  )
)

性能测试

console.time('switchLetterCase1')
for (let i = 0; i < 100 * 10000; i++) 
 switchLetterCase1(s)

console.timeEnd('switchLetterCase1')

console.time('switchLetterCase2')
for (let i = 0; i < 100 * 10000; i++) 
 switchLetterCase2(s)

console.timeEnd('switchLetterCase2')

打印结果

switchLetterCase1: 3.007s
switchLetterCase2: 1.356s

ASCII 码优于 正则表达式

性能分析

  • 使用正则表达式,性能较差
  • 使用ASCII码判断,性能较好——推荐答案

总结

  • 慎用正则表达式
  • 常见字符的ASCII码
  • 增加知识广度,可以更快的思考解决问题的方法

以上是关于文字 编码 正则表达式 切换的主要内容,如果未能解决你的问题,请参考以下文章

求验证中文正则表达式

正则表达式

js正则匹配替代指定字符(根据img标签的src中的命名规则,用正则表达式替换成下面格式的文字)

js正则匹配替代指定字符(根据img标签的src中的命名规则,用正则表达式替换成下面格式的文字)

java中正则表达式基本用法

Java 正则简单用法