【问题标题】:Android - concatenate two different languages stringsAndroid - 连接两种不同的语言字符串
【发布时间】:2015-07-20 19:24:34
【问题描述】:

我找不到这个“简单”动作的解决方案:

我正在尝试附加 2 个字符串以获得完整的文件路径(文件夹和文件名):

String a = /storage/emulated/0/abc/לכ/
这有非英文字母和

String b = 20141231_042822.jpg

String c = a + b

结果:

/storage/emulated/0/abc/לכ/20141231_042822.jpg

(也试过 StringBuilder)

【问题讨论】:

  • 将该字符串转换为 UTF-8 格式,然后尝试附加它以便它适用于你
  • 我已经尝试了stackoverflow.com/questions/3161712/… 中的最后一个示例,但仍然无法正常工作:/
  • 为了清楚起见,非英语语言是从右到左书写的,不像英语是从左到右
  • 使用 URLEncoder.encode("text","UTF-8");试试这个,我想它可能有效。给你:)
  • String a 和 String b 应该怎么做?

标签: android string append stringbuilder multilingual


【解决方案1】:

尝试使用BidiFormatter

对于example

private static String text = "%s הוא עסוק";
private static String phone = "+1 650 253 0000";

String wrappedPhone = BidiFormatter.getInstance(true /* rtlContext */).unicodeWrap(phone);
String formattedText = String.format(text, wrappedPhone);

【讨论】:

  • 你的提议仍然没有成功:\
【解决方案2】:

改用char[],用这个方法一一添加:

public char[] generatePath(String a, String b){
    if(a==null || b==null)
        return null;

    char[] result = new char[a.length() +b.length()];

    for(int i=0;i<a.length();i++)
       result[i]=a.charAt(i);

    for(int i=a.length();i<a.length()+b.length();i++)
       result[i]=a.charAt(i);

    return result;
}

这将确保每个字符都在正确的位置。

String Java 中的对象没有编码 (*)。

唯一有编码的是byte[]。所以如果你需要 UTF-8 数据,那么你需要一个byte[]。如果你有一个String 那 包含意外数据,则问题出在较早的地方 错误地将一些二进制数据转换为String(即它是 使用错误的编码)。

(*) 这并不完全准确。实际上他们有一个编码,但是 那是UTF-16,不能修改。 来源:answer

你要做的是使用Byte[]而不是字符串

试试this

Charset.forName("UTF-8").encode(myString);

this

byte[] ptext = String.getBytes("UTF-8");

【讨论】:

  • 我已经修复了你的代码来做你想做的事情,结果 char[] 有正确的字符序列,但是当我 new String(result) --> 它扭曲了字符串再一次。
  • 我不太确定,在调用 generatePath() 之后,如何将 char[] 转换为“好”字符串?
  • 使用new String(generatePath()a,b)@MikoDiko
  • 如果您愿意,您必须更具体地@MikoDiko 让我们为您提供帮助。并且不要忘记,如果您发现任何或我们的答案对您有用,请投票以感谢时间
  • 在主帖中添加了一小段信息 --> 澄清一下,非英语语言是从右到左书写的,不像英语是从左到右
猜你喜欢
  • 1970-01-01
  • 2015-12-22
  • 1970-01-01
  • 1970-01-01
  • 2016-11-04
  • 1970-01-01
  • 2016-12-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多