Как мога да конвертирам международен (напр. руски) низ в \u
числа (уникод числа)
напр. \u041e\u041a
за OK
?
Преобразувайте международен низ в \u кодове в java
Отговори (12)
В случай, че имате нужда от това, за да напишете .properties
файл, можете просто да добавите низовете в обект Properties и след това да го запишете във файл. Той ще се погрижи за преобразуването.
ISO-8859-1
(първа уникод страница) и също така записва в това кодиране. Ето защо се нуждае от \uXXXX
екрани и ги създава при запазване. Въпреки че от версия 1.6 на Java свойствата позволяват да се чете входът от обект Reader, така че да можете да създадете свой собствен собствен формат на файла със свойства, базиран на UTF-8.
- person x4u; 03.06.2011
\uXXXX
е по-малко ефективно от UTF-8 или UTF-16. Освен това прави невъзможно редактирането на тези файлове във всеки редактор, който не познава това специално кодиране. Но поне позволява да се записва и зарежда целият уникод текст до степента, която се поддържа от Java VM като цяло.
- person x4u; 03.06.2011
има JDK инструменти, изпълнявани чрез командния ред както следва :
native2ascii -encoding utf8 src.txt output.txt
Пример:
src.txt
بسم الله الرحمن الرحيم
output.txt
\u0628\u0633\u0645 \u0627\u0644\u0644\u0647 \u0627\u0644\u0631\u062d\u0645\u0646 \u0627\u0644\u0631\u062d\u064a\u0645
Ако искате да го използвате във вашето Java приложение, можете да обвиете този команден ред с:
String pathSrc = "./tmp/src.txt";
String pathOut = "./tmp/output.txt";
String cmdLine = "native2ascii -encoding utf8 " + new File(pathSrc).getAbsolutePath() + " " + new File(pathOut).getAbsolutePath();
Runtime.getRuntime().exec(cmdLine);
System.out.println("THE END");
След това прочетете съдържанието на новия файл.
Можете да използвате escapeJavaStyleString
от org.apache.commons.lang.StringEscapeUtils
.
escapeJava
във версиите 3.x
- person Brad Mace; 25.06.2013
И аз имах този проблем. Имах текст на португалски с някои специални знаци, но тези знаци вече бяха във формат Unicode (напр.: \u00e3
).
Така че искам да конвертирам S\u00e3o
в São
.
Направих го с помощта на apache commons StringEscapeUtils. Както каза @sorin-sbarnea. Може да се изтегли тук.
Използвайте метода unescapeJava
, като този:
String text = "S\u00e3o"
text = StringEscapeUtils.unescapeJava(text);
System.out.println("text " + text);
(Съществува и методът escapeJava
, но този поставя уникод символите в низа.)
Ако някой знае решение на чиста Java, моля, кажете ни.
Ето подобрена версия на отговора на ArtB:
StringBuilder b = new StringBuilder();
for (char c : input.toCharArray()) {
if (c >= 128)
b.append("\\u").append(String.format("%04X", (int) c));
else
b.append(c);
}
return b.toString();
Тази версия избягва всички знаци, които не са ASCII, и работи правилно за ниски Unicode кодови точки като Ä
.
char
.
- person mik01aj; 21.11.2018
Има три части на отговора
- Вземете Unicode за всеки знак
- Определете дали е в страницата на кирилица
- Преобразуване в шестнадесетичен.
За да получите всеки знак, можете да итерирате през низа, като използвате charAt()
или toCharArray()
методи.
for( char c : s.toCharArray() )
Стойността на char е Unicode стойността.
Cyrillic Unicode знаците са всеки знак в следните диапазони:
Cyrillic: U+0400–U+04FF ( 1024 - 1279)
Cyrillic Supplement: U+0500–U+052F ( 1280 - 1327)
Cyrillic Extended-A: U+2DE0–U+2DFF (11744 - 11775)
Cyrillic Extended-B: U+A640–U+A69F (42560 - 42655)
Ако е в този диапазон е кирилица. Просто извършете проверка на if. Ако е в диапазона, използвайте Integer.toHexString()
и предварете "\\u"
. Сглобено трябва да изглежда нещо подобно:
final int[][] ranges = new int[][]{
{ 1024, 1279 },
{ 1280, 1327 },
{ 11744, 11775 },
{ 42560, 42655 },
};
StringBuilder b = new StringBuilder();
for( char c : s.toCharArray() ){
int[] insideRange = null;
for( int[] range : ranges ){
if( range[0] <= c && c <= range[1] ){
insideRange = range;
break;
}
}
if( insideRange != null ){
b.append( "\\u" ).append( Integer.toHexString(c) );
}else{
b.append( c );
}
}
return b.toString();
Редактиране: вероятно трябва да направите проверката c < 128
и да обърнете телата if
и else
; вие вероятно трябва да избягвате всичко, което не е ASCII. Вероятно бях твърде буквален в прочита на въпроса ви.
toCharArray()
.
- person Sled; 10.02.2014
Ä
връща \uC4
, а не \u00c4
.
- person mik01aj; 08.12.2014
Има инструмент за команден ред, който се доставя с Java, наречен native2ascii. Това преобразува Unicode файлове в ASCII-екранирани файлове. Открих, че това е необходима стъпка за генериране на .properties файлове за локализация.
Apache commons StringEscapeUtils.escapeEcmaScript(String)
връща низ с уникод знаци, екранирани с помощта на нотацията \u
.
"Art of Beer ???? ????" -> "Art of Beer \u1F3A8 \u1F37A"
Има Java библиотека с отворен код MgntUtils, която има помощна програма, която преобразува низове в unicode последователност и обратно:
result = "Hello World";
result = StringUnicodeEncoderDecoder.encodeStringToUnicodeSequence(result);
System.out.println(result);
result = StringUnicodeEncoderDecoder.decodeUnicodeSequenceToString(result);
System.out.println(result);
Резултатът от този код е:
\u0048\u0065\u006c\u006c\u006f\u0020\u0057\u006f\u0072\u006c\u0064
Hello World
Библиотеката може да бъде намерена в Maven Central или на Github Предлага се като maven артефакт и с източници и javadoc
Ето javadoc за класа StringUnicodeEncoderDecoder
Само някои основни методи за това (вдъхновени от инструмента native2ascii):
/**
* Encode a String like äöü to \u00e4\u00f6\u00fc
*
* @param text
* @return
*/
public String native2ascii(String text) {
if (text == null)
return text;
StringBuilder sb = new StringBuilder();
for (char ch : text.toCharArray()) {
sb.append(native2ascii(ch));
}
return sb.toString();
}
/**
* Encode a Character like ä to \u00e4
*
* @param ch
* @return
*/
public String native2ascii(char ch) {
if (ch > '\u007f') {
StringBuilder sb = new StringBuilder();
// write \udddd
sb.append("\\u");
StringBuffer hex = new StringBuffer(Integer.toHexString(ch));
hex.reverse();
int length = 4 - hex.length();
for (int j = 0; j < length; j++) {
hex.append('0');
}
for (int j = 0; j < 4; j++) {
sb.append(hex.charAt(3 - j));
}
return sb.toString();
} else {
return Character.toString(ch);
}
}
Вероятно бихте могли да хакнете, ако от този JavaScript код:
/* convert ???? to \uD83D\uDE4C */
function text_to_unicode(string) {
'use strict';
function is_whitespace(c) { return 9 === c || 10 === c || 13 === c || 32 === c; }
function left_pad(string) { return Array(4).concat(string).join('0').slice(-1 * Math.max(4, string.length)); }
string = string.split('').map(function(c){ return "\\u" + left_pad(c.charCodeAt(0).toString(16).toUpperCase()); }).join('');
return string;
}
/* convert \uD83D\uDE4C to ???? */
function unicode_to_text(string) {
var prefix = "\\\\u"
, regex = new RegExp(prefix + "([\da-f]{4})","ig")
;
string = string.replace(regex, function(match, backtrace1){
return String.fromCharCode( parseInt(backtrace1, 16) )
});
return string;
}
източник: iCompile - Още едно JavaScript Unicode кодиране/декодиране
това име на тип е Decode/Unescape Unicode. този връзка към сайт онлайн конвертор.