c# - 分割多语言字符串

标签 c# java .net

我有一个 AS/400 回复文本,它是多语言字符串,如下所示,长度为 28872 个字符。

2012021920120219000000000300000D000000010146208D22ﻑﻳﺭﺎﺻﻣ

我必须将文本拆分为每个 block 240 个字符,但由于中间有阿拉伯字符,我的逻辑无法提取确切的 240 个字符长度。

我的问题是如何在不丢失原始格式的情况下拆分多语言文本?

最佳答案

您应该这样编写代码,以便根据文本编码准确提取 240 个字符。根据编码的不同,一个字符可以占用多个字节。常见的编码是 UTF-8。查看 Wikipedia,了解 UTF-8 的工作原理。这将使您能够编写正确的工作代码。 UTF-8 Description

因此,您应该找出当前字符占用了多少字节。

当然,在开始之前,请确保您知道输入文本的编码。


知道Java使用UTF-16来存储字符。因此,这意味着一个阿拉伯字符可以由多个 char 组成,因为代码点超过 2^16。为了正确处理这个问题,我会将整个字符串转换为字节缓冲区:

String longStringToSplit = ...;
byte[] stringUTF8 = longStringToSplit.getBytes("UTF-8");
// now, split it manually and correct, using the utf-8 specifications you
// can find in the link I gave you to wiki.

关于c# - 分割多语言字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11774689/

相关文章:

c# - 在 PushSharp 4.0 中构建 GCM 消息

c# - 如何使用 RestSharp 使用 JWT 访问 token 和用户声明

c# - Entity Framework 中的 NEWID() SQL Server 函数

java - WeavingURLClassLoader 只能编织本地 jar 的各个方面吗?

c# - 从 PathTooLongException 中检索路径信息

c# - 手动引发控件上的 LostFocus 事件

c# - 转换为计算/绝对位置

c# - 在同步代码中实现需要 Task 返回类型的接口(interface)

java - (Apache Beam) 无法增加执行程序内存 - 尽管使用了多个设置,它仍固定为 1024M

java - 如何实现 Iterable 接口(interface)?