如何将 cp1251 字节数组转换为 utf8 字符串?

2023-12-09

我们在手机上没有可用的 cp1251 代码页,因此 new String( data, "cp1251" )doesn't work.

我们需要一个具有类似签名的函数

String ArrayCp1251toUTF8String(byte data[]);

首先,Java 中不存在“UTF-8 字符串”这样的东西,它们只是字符串。但您无需担心字符串的编码,只需担心要转换的字节的编码。自从cp1251 (or windows-1251)是单字节编码,解码是使用字节值作为适当数组的索引的简单问题char价值观。这是一个例子:

static String decodeCp1251(byte[] data)
{
  if (data == null)
  {
    throw new IllegalArgumentException("Null argument");
  }
  StringBuffer sb = new StringBuffer(data.length);
  for (int i = 0; i < data.length; i++)
  {
    sb.append(cp1251Map[data[i] & 0xFF]);
  }
  return sb.toString();
}

static char[] cp1251Map = new char[] {
  '\u0000', '\u0001', '\u0002', '\u0003', '\u0004', '\u0005', '\u0006', '\u0007',
  '\u0008', '\u0009', '\n', '\u000B', '\u000C', '\r', '\u000E', '\u000F',
  '\u0010', '\u0011', '\u0012', '\u0013', '\u0014', '\u0015', '\u0016', '\u0017',
  '\u0018', '\u0019', '\u001A', '\u001B', '\u001C', '\u001D', '\u001E', '\u001F',
  '\u0020', '\u0021', '\u0022', '\u0023', '\u0024', '\u0025', '\u0026', '\'',
  '\u0028', '\u0029', '\u002A', '\u002B', '\u002C', '\u002D', '\u002E', '\u002F',
  '\u0030', '\u0031', '\u0032', '\u0033', '\u0034', '\u0035', '\u0036', '\u0037',
  '\u0038', '\u0039', '\u003A', '\u003B', '\u003C', '\u003D', '\u003E', '\u003F',
  '\u0040', '\u0041', '\u0042', '\u0043', '\u0044', '\u0045', '\u0046', '\u0047',
  '\u0048', '\u0049', '\u004A', '\u004B', '\u004C', '\u004D', '\u004E', '\u004F',
  '\u0050', '\u0051', '\u0052', '\u0053', '\u0054', '\u0055', '\u0056', '\u0057',
  '\u0058', '\u0059', '\u005A', '\u005B', '\\', '\u005D', '\u005E', '\u005F',
  '\u0060', '\u0061', '\u0062', '\u0063', '\u0064', '\u0065', '\u0066', '\u0067',
  '\u0068', '\u0069', '\u006A', '\u006B', '\u006C', '\u006D', '\u006E', '\u006F',
  '\u0070', '\u0071', '\u0072', '\u0073', '\u0074', '\u0075', '\u0076', '\u0077',
  '\u0078', '\u0079', '\u007A', '\u007B', '\u007C', '\u007D', '\u007E', '\u007F',
  '\u0402', '\u0403', '\u201A', '\u0453', '\u201E', '\u2026', '\u2020', '\u2021',
  '\u20AC', '\u2030', '\u0409', '\u2039', '\u040A', '\u040C', '\u040B', '\u040F',
  '\u0452', '\u2018', '\u2019', '\u201C', '\u201D', '\u2022', '\u2013', '\u2014',
  '\uFFFD', '\u2122', '\u0459', '\u203A', '\u045A', '\u045C', '\u045B', '\u045F',
  '\u00A0', '\u040E', '\u045E', '\u0408', '\u00A4', '\u0490', '\u00A6', '\u00A7',
  '\u0401', '\u00A9', '\u0404', '\u00AB', '\u00AC', '\u00AD', '\u00AE', '\u0407',
  '\u00B0', '\u00B1', '\u0406', '\u0456', '\u0491', '\u00B5', '\u00B6', '\u00B7',
  '\u0451', '\u2116', '\u0454', '\u00BB', '\u0458', '\u0405', '\u0455', '\u0457',
  '\u0410', '\u0411', '\u0412', '\u0413', '\u0414', '\u0415', '\u0416', '\u0417',
  '\u0418', '\u0419', '\u041A', '\u041B', '\u041C', '\u041D', '\u041E', '\u041F',
  '\u0420', '\u0421', '\u0422', '\u0423', '\u0424', '\u0425', '\u0426', '\u0427',
  '\u0428', '\u0429', '\u042A', '\u042B', '\u042C', '\u042D', '\u042E', '\u042F',
  '\u0430', '\u0431', '\u0432', '\u0433', '\u0434', '\u0435', '\u0436', '\u0437',
  '\u0438', '\u0439', '\u043A', '\u043B', '\u043C', '\u043D', '\u043E', '\u043F',
  '\u0440', '\u0441', '\u0442', '\u0443', '\u0444', '\u0445', '\u0446', '\u0447',
  '\u0448', '\u0449', '\u044A', '\u044B', '\u044C', '\u044D', '\u044E', '\u044F'
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将 cp1251 字节数组转换为 utf8 字符串? 的相关文章

随机推荐

  • 将键值对传递给 JavaScript 文件

    您可以将键值对传递给 JavaScript 文件吗 该技术由脚本性的 see line 54 您可以通过检查源来实现这一点script在你的页面上的元素中 我给你留下了一个独立于框架的功能 function getScriptVariabl
  • 推送通知在 iOS 10 中不显示

    如何在 iOS 10 中获取通知 在以前的版本中 我可以在以下位置收到通知func application application UIApplication didReceiveRemoteNotification userInfo NS
  • C++ 重载决策、转换运算符和 const

    在这种情况下 void f int void f const int int i f i 情况非常清楚 f int 被调用 这似乎是正确的 但是 如果我有这个 这是错误地完成的 class aa public operator bool c
  • delegate 类似于 mvc 控制器吗?

    我看到了这篇文章 http www cimgf com 2008 10 01 cocoa touch tutorial iphone application example 委托 控制器 委托和控制器这两个词可以同义使用 我不确定他在说什么
  • 如何从 Ruby 运行 Excel 宏?

    Problem 我有这本十多年前的 Excel 工作簿 其中有无数行 VBA 代码 其中一些我必须更新 所以我有了用 Ruby 编写单元测试的疯狂想法 Question 如何从 Ruby 调用 Excel 宏 到目前为止我所拥有的 I ha
  • 这个 State monad 代码是如何工作的?

    这段代码来自于此article 我一直能够遵循它直到这一部分 module Test where type State Int data ST a S State gt a State apply ST a gt State gt a St
  • 为什么我的 div 边距重叠以及如何修复它?

    我不明白为什么这些 div 的边距重叠 alignright float right header social margin top 50px header social a display inline block header soc
  • 如何异步触发JProgressBar?

    我有一个JButton swing 在里面JPanel 如果按下它 我将在其列表中的 for 循环上执行任务EDT thread 这样做时我需要更新JProgressBar 问题是 当我按下 JButton 时 任务是在事件调度线程 EDT
  • 如果我第二天打开应用程序,Firestore 是否会再次收取文档读取费用?

    我没有找到任何解决方案来避免使用 get 时从服务器读取数据 但是 我可能找到了解决方案 但我不清楚它是否有效 我发现在使用实时功能时 客户端会随着数据的变化而不断更新 所以根据我的理解 如果服务器上没有任何更改 则不会收取任何读取费用 对
  • 从受密码保护的 Access 数据库进行 Excel VBA 查询

    我目前正在尝试从 Microsoft Access 数据库 mdb 查询其中一个表 但是 当我尝试执行SELECT FROM myTable 它给出 用户定义类型未定义 我可以知道为什么吗 这是我的示例代码 Private Sub Comm
  • ValueError:lstm 层的输入 0 与该层不兼容:预期 ndim=3,发现 ndim=2。收到完整形状:[无,18]

    我是 Keras 新手 我正在尝试构建一个供个人使用 未来学习的模型 我刚刚开始使用 python 并想出了这段代码 在视频和教程的帮助下 我有 16324 个实例的数据 每个实例由 18 个特征和 1 个因变量组成 import pand
  • 如何在 .npmrc 文件中使用 GitHub 机密?

    我在 GitHub 上有一个项目 它有几个依赖项 所有这些依赖项都发布在 GitHub 包注册表上 我使用 GitHub 操作来发布我的包 我可以在我的应用程序中使用 GitHub 机密workflow yml文件但在我的中不是这样 npm
  • 找不到适用于 jdbc:h2:tcp 的驱动程序

    当我尝试使用 java Web 应用程序连接到 h2 数据库时 抛出 java sql SQLException No合适的驱动程序找到 jdbc h2 tcp localhost ZadatakDB 我可以毫无问题地使用 H2 控制台 并
  • 如何粘贴而不覆盖寄存器

    有谁知道一种方法可以粘贴到视觉上选择的区域而不将选择放置在默认寄存器中 I know I can solve the problem by always pasting from an explicit register But it s
  • IntelliJ Idea 使用错误的 git

    我无法让 git 与 IntelliJ IDEA 2022 3 1 终极版 一起使用MacOS Monterey 12 5 芯片 Apple M1 Pro git 可执行文件的路径 usr local bin git IntelliJ Id
  • 使用 Freemarker 解析 Spring MVC 中的视图 - 包括 jsp 页面

    使用 FreemarkerServlet 时 可以将 JSP 页面与 Freemarker 内容一起包含在内 但是 我在 Spring MVC 应用程序中使用 Freemarker 作为视图解析器 因此不使用 FreemarkerServl
  • 正则表达式搜索并替换为可选的复数

    我是正则表达式的新手 所以希望一些专家能够对我的问题打哈欠并给出一个简单的答案 我试图查找并替换以某个字母开头的单词 如果它们是复数 则保留它们的复数 因此 例如 我想将 boy 一词替换为 band 将 boys 替换为 bands te
  • TypeScript 导出和导入 尚未加载上下文的模块名称:_。使用 require([])

    当我尝试在浏览器中运行应用程序时 我在调试控制台窗口中收到以下消息 Module name Person has not been loaded yet for context Use require 当然 如果合并 ts 文件的内容 一切
  • PHP 安装程序脚本 [重复]

    这个问题在这里已经有答案了 可能的重复 我如何为网站创建安装程序 PHP mysql 我正在寻找使用 PHP 为稍微复杂的 Web 应用程序创建一个功能齐全的安装程序 基本上 您访问 URL setup php 系统会询问您一系列问题 在此
  • 如何将 cp1251 字节数组转换为 utf8 字符串?

    我们在手机上没有可用的 cp1251 代码页 因此 new String data cp1251 doesn t work 我们需要一个具有类似签名的函数 String ArrayCp1251toUTF8String byte data 首