2016-03-28 34 views
-1

hariç, Groovy'deki özel karakterlerden nasıl kaçınır Unicode karakterler (\ u) dışında bir karakter dizisindeki tüm özel karakterlerden kaçmak isterim, çünkü hala ingilizce olmayan karakterleri doğru şekilde görüntülemek istiyorum. Şu anda StringEscapeUtils.escapeJava() yöntemini kullanıyorum, ancak belirli karakterleri hariç tutmanın bir yolunu bulamadım (bu örnekte unicode için \ u). Düşünebildiğim tek alternatif, ideal görünmeyen \ u hariç her özel karakter için yerini al ya da değiştir. Bunu yapmanın daha iyi bir yolu var mı?Unicode

Ör:

"Los 
niños" 

"Los\nniños" yerine "Los\nni\u00F1os"

+0

den? –

+0

@tim_yates, varsayılanları UTF-8 olarak kullanıyorum. Mümkünse bunu yapmayı tercih ederim ama bunun için çalışacak bir kodlama öneriniz var mı? Teşekkürler! – snarkblurb

+0

Bu kodlamayı neden yaptığınızı daha iyi anlatabilir misiniz? –

cevap

0

Tamam dönüştürülmesi gerekir, bu yüzden StringEscapeUtils koduna bakarsak, biz escapeJava method here görebilirsiniz:

public static final String escapeJava(final String input) { 
    return ESCAPE_JAVA.translate(input); 
} 

Hangi ESCAPE_JAVAwhich is defined here

kullanıyor
public static final CharSequenceTranslator ESCAPE_JAVA = 
     new LookupTranslator(
     new String[][] { 
      {"\"", "\\\""}, 
      {"\\", "\\\\"}, 
     }).with(
     new LookupTranslator(EntityArrays.JAVA_CTRL_CHARS_ESCAPE()) 
    ).with(
     JavaUnicodeEscaper.outsideOf(32, 0x7f) 
    ); 

Yani,

Yani biz kendi ... Verilen girişinizi dize dönebilirsiniz ... bu size istenmeyen kaçışa veriyor bu son bit olduğunu düşünüyorum:

def input = '''Los 
niños''' 

Biz sınıfları içe ve kendi LookupTranslator oluşturmak (dan parçalamakla ilk bit commons-lang) olabilir:

import org.apache.commons.lang3.text.translate.EntityArrays 
import org.apache.commons.lang3.text.translate.LookupTranslator 

def translator = new LookupTranslator([["\"", "\\\""], ["\\", "\\\\"]] as String[][]).with(
    new LookupTranslator(EntityArrays.JAVA_CTRL_CHARS_ESCAPE()) 
) 

ve sonra, biz kaçabilir yo ur giriş String, ve sonucu kontrol beklendiği gibi:

assert translator.translate(input) == 'Los \\nniños' 

sen (tabii ki ancak yüksek olmayan kod karakter) 32 altına unicode karakter için kaçan gerekiyorsa, sizin çevirmen değiştirebilirsiniz:

import org.apache.commons.lang3.text.translate.EntityArrays 
import org.apache.commons.lang3.text.translate.JavaUnicodeEscaper 
import org.apache.commons.lang3.text.translate.LookupTranslator 

def translator = new LookupTranslator([["\"", "\\\""], ["\\", "\\\\"]] as String[][]).with(
    new LookupTranslator(EntityArrays.JAVA_CTRL_CHARS_ESCAPE()) 
).with(JavaUnicodeEscaper.below(32)) 

Bütün bunlar ben kullandığınız sürüm olduğunu varsayalım commons-lang3 ... sadece uygun bir kodlama seçemezsiniz neden ... anlamıyorum

+0

altında gönderme Çok teşekkürler! Bu mükemmel çalışıyor. – snarkblurb