Reputation: 954
I can't find a solution to this "simple" action:
I'm trying to append 2 strings to get a full file path (folders and file name):
String a = /storage/emulated/0/abc/לכ
/
this has non-English letters and
String b = 20141231_042822.jpg
String c = a + b
the result:
/storage/emulated/0/abc/לכ/20141231_042822.jpg
(Tried with StringBuilder as well)
Upvotes: 4
Views: 631
Reputation: 5737
Try to use BidiFormatter
For 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);
Upvotes: 1
Reputation: 9999
Use char[]
instead and add them one by one using this method:
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;
}
This would ensure that each character is in the right place.
String
objects in Java don't have an encoding (*).The only thing that has an encoding is a
byte[]
. So if you need UTF-8 data, then you need abyte[]
. If you have aString
that contains unexpected data, then the problem is at some earlier place that incorrectly converted some binary data to aString
(i.e. it was using the wrong encoding).(*) that's not entirely accurate. Actually they have an encoding, but that's UTF-16 and can't be modified. source: answer
What you have to do is to use Byte[]
instead of String
Try this
Charset.forName("UTF-8").encode(myString);
or this
byte[] ptext = String.getBytes("UTF-8");
Upvotes: 0