문제

우리는 주로 유럽 고객이 다른 시스템에 배포해야 하는 텍스트(UTF-8)를 입력하는 시스템을 보유하고 있으며 대부분은 UTF-8을 허용하지만 이제는 미국 시스템에만 텍스트를 배포해야 합니다. -아스키 7비트

이제 모든 유럽 문자를 가장 가까운 US-Ascii로 번역해야 합니다.이 작업에 도움이 되는 Java 라이브러리가 있습니까?

지금은 번역 테이블에 추가하기 시작했습니다. Å(스웨덴 AA)->A 등이고 입력한 문자와 일치하는 항목을 찾을 수 없으면 이를 기록하고 물음표로 대체합니다. 그리고 다음 릴리스에서 이를 수정하려고 시도하지만 이는 매우 비효율적이며 다른 누군가가 이전에 비슷한 작업을 수행했을 것입니다.

도움이 되었습니까?

해결책

그만큼 uni2ascii 프로그램은 C로 작성되었지만 거의 노력하지 않고 Java로 변환 할 수 있습니다. 여기에는 큰 근사 표가 포함되어 있습니다 (암시 적으로 스위치 사례 문서).

보편적으로 받아 들여지는 근사치가 없음을 알고 있어야합니다. 독일인은 AE, FINNS 및 SWEDES로 ä를 대체하기를 원합니다. Å 스웨덴 사람들은 아마도 반지를 떨어 뜨리고 A를 사용하지만 Danes와 Norwegians는 역사적으로 더 정확한 AA를 더 좋아할 것입니다.

다른 팁

다음과 같이 할 수 있습니다 (NFD 예제에서 이 핵심 Java 기술 기술 팁):

public static String decompose(String s) {
    return java.text.Normalizer.normalize(s, java.text.Normalizer.Form.NFD).replaceAll("\\p{InCombiningDiacriticalMarks}+","");
}

자신만의 테이블을 만드는 대신 텍스트를 정규화 형식 D로 변환할 수 있습니다. 여기서 문자는 기본 문자와 발음 구별 부호로 표시됩니다(예를 들어 "á"는 "a"로 대체되고 그 뒤에 결합된 악센트가 옵니다). ).그런 다음 ASCII 문자가 아닌 모든 항목을 제거할 수 있습니다.

테이블은 여전히 ​​존재하지만 이제 유니코드 표준의 테이블입니다.

NFD 대신 NFKD를 사용해 더 많은 사례를 포착할 수도 있습니다.

참고자료:

에 대한 응답으로 Joe Liversedge가 제공 한 답변, 언급 된 루센 Irolatin1accentFilter 더 이상 존재하지 않습니다 :

대체되었습니다 org.apache.lucene.analysis.asciifoldingfilter :

이 클래스는 처음 127 ASCII 문자 ( "기본 라틴"유니 코드 블록)가 아닌 알파벳, 숫자 및 상징적 유니 코드 문자를 ASCII 동등 물질로 변환합니다. 다음 유니 코드 블록의 문자는 변환됩니다. 그러나 합리적인 ASCII 대안을 가진 캐릭터 만 변환됩니다.

참고 -

이것은 일반적으로 검색 응용 프로그램에 유용합니다. 해당 루센을 참조하십시오 Irolatin1accentFilter 구현. 이것은 실제로 무작위 로컬 구현에 연결하기 위해 설계되지는 않았지만 트릭을 수행합니다.

이를 위해 내장 기능이 있습니다. 관련된 주요 수업은입니다 CharsetEncoder, 이것은의 일부입니다 nio 패키지. 더 간단한 방법입니다 String.getBytes(Charset) 그것은 a로 보낼 수 있습니다 ByteArrayOutputStream.

새 문자열 ( "½".getBytes ( "us-ASCII"))

이것이 제가 사용하는 것입니다.

<?php
function remove_accent($str)  {
#   http://www.php.net/manual/en/function.preg-replace.php#96586
$a = array('À', 'Á', 'Â', 'Ã', 'Ä', 'Å', 'Æ', 'Ç', 'È', 'É', 'Ê', 'Ë', 'Ì', 'Í', 'Î', 'Ï', 'Ð', 'Ñ', 'Ò', 'Ó', 'Ô', 'Õ', 'Ö', 'Ø', 'Ù', 'Ú', 'Û', 'Ü', 'Ý', 'ß', 'à', 'á', 'â', 'ã', 'ä', 'å', 'æ', 'ç', 'è', 'é', 'ê', 'ë', 'ì', 'í', 'î', 'ï', 'ñ', 'ò', 'ó', 'ô', 'õ', 'ö', 'ø', 'ù', 'ú', 'û', 'ü', 'ý', 'ÿ', 'Ā', 'ā', 'Ă', 'ă', 'Ą', 'ą', 'Ć', 'ć', 'Ĉ', 'ĉ', 'Ċ', 'ċ', 'Č', 'č', 'Ď', 'ď', 'Đ', 'đ', 'Ē', 'ē', 'Ĕ', 'ĕ', 'Ė', 'ė', 'Ę', 'ę', 'Ě', 'ě', 'Ĝ', 'ĝ', 'Ğ', 'ğ', 'Ġ', 'ġ', 'Ģ', 'ģ', 'Ĥ', 'ĥ', 'Ħ', 'ħ', 'Ĩ', 'ĩ', 'Ī', 'ī', 'Ĭ', 'ĭ', 'Į', 'į', 'İ', 'ı', 'IJ', 'ij', 'Ĵ', 'ĵ', 'Ķ', 'ķ', 'Ĺ', 'ĺ', 'Ļ', 'ļ', 'Ľ', 'ľ', 'Ŀ', 'ŀ', 'Ł', 'ł', 'Ń', 'ń', 'Ņ', 'ņ', 'Ň', 'ň', 'ʼn', 'Ō', 'ō', 'Ŏ', 'ŏ', 'Ő', 'ő', 'Œ', 'œ', 'Ŕ', 'ŕ', 'Ŗ', 'ŗ', 'Ř', 'ř', 'Ś', 'ś', 'Ŝ', 'ŝ', 'Ş', 'ş', 'Š', 'š', 'Ţ', 'ţ', 'Ť', 'ť', 'Ŧ', 'ŧ', 'Ũ', 'ũ', 'Ū', 'ū', 'Ŭ', 'ŭ', 'Ů', 'ů', 'Ű', 'ű', 'Ų', 'ų', 'Ŵ', 'ŵ', 'Ŷ', 'ŷ', 'Ÿ', 'Ź', 'ź', 'Ż', 'ż', 'Ž', 'ž', 'ſ', 'ƒ', 'Ơ', 'ơ', 'Ư', 'ư', 'Ǎ', 'ǎ', 'Ǐ', 'ǐ', 'Ǒ', 'ǒ', 'Ǔ', 'ǔ', 'Ǖ', 'ǖ', 'Ǘ', 'ǘ', 'Ǚ', 'ǚ', 'Ǜ', 'ǜ', 'Ǻ', 'ǻ', 'Ǽ', 'ǽ', 'Ǿ', 'ǿ'); 
$b = array('A', 'A', 'A', 'A', 'A', 'A', 'AE', 'C', 'E', 'E', 'E', 'E', 'I', 'I', 'I', 'I', 'D', 'N', 'O', 'O', 'O', 'O', 'O', 'O', 'U', 'U', 'U', 'U', 'Y', 's', 'a', 'a', 'a', 'a', 'a', 'a', 'ae', 'c', 'e', 'e', 'e', 'e', 'i', 'i', 'i', 'i', 'n', 'o', 'o', 'o', 'o', 'o', 'o', 'u', 'u', 'u', 'u', 'y', 'y', 'A', 'a', 'A', 'a', 'A', 'a', 'C', 'c', 'C', 'c', 'C', 'c', 'C', 'c', 'D', 'd', 'D', 'd', 'E', 'e', 'E', 'e', 'E', 'e', 'E', 'e', 'E', 'e', 'G', 'g', 'G', 'g', 'G', 'g', 'G', 'g', 'H', 'h', 'H', 'h', 'I', 'i', 'I', 'i', 'I', 'i', 'I', 'i', 'I', 'i', 'IJ', 'ij', 'J', 'j', 'K', 'k', 'L', 'l', 'L', 'l', 'L', 'l', 'L', 'l', 'l', 'l', 'N', 'n', 'N', 'n', 'N', 'n', 'n', 'O', 'o', 'O', 'o', 'O', 'o', 'OE', 'oe', 'R', 'r', 'R', 'r', 'R', 'r', 'S', 's', 'S', 's', 'S', 's', 'S', 's', 'T', 't', 'T', 't', 'T', 't', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'W', 'w', 'Y', 'y', 'Y', 'Z', 'z', 'Z', 'z', 'Z', 'z', 's', 'f', 'O', 'o', 'U', 'u', 'A', 'a', 'I', 'i', 'O', 'o', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'A', 'a', 'AE', 'ae', 'O', 'o'); 
return str_replace($a, $b, $str); 
}

function SEOify($i){
#   http://php.ca/manual/en/function.preg-replace.php#90316
$o          = $i;
$o          = html_entity_decode($o,ENT_COMPAT,'UTF-8');
$o          = remove_accent(trim($o)); 
$patterns   = array( "([\40])" , "([^a-zA-Z0-9_-])", "(-{2,})" ); 
$replacers  = array("-", "", "-"); 
$o          = preg_replace($patterns, $replacers, $o);
return $o;
}
?>

이것이 작동하는 것 같습니다.

private synchronized static String utftoasci(String s){
  final StringBuffer sb = new StringBuffer( s.length() * 2 );

  final StringCharacterIterator iterator = new StringCharacterIterator( s );

  char ch = iterator.current();

  while( ch != StringCharacterIterator.DONE ){
   if(Character.getNumericValue(ch)>0){
    sb.append( ch );
   }else{
    boolean f=false;
    if(Character.toString(ch).equals("Ê")){sb.append("E");f=true;}
    if(Character.toString(ch).equals("È")){sb.append("E");f=true;}
    if(Character.toString(ch).equals("ë")){sb.append("e");f=true;}
    if(Character.toString(ch).equals("é")){sb.append("e");f=true;}
    if(Character.toString(ch).equals("è")){sb.append("e");f=true;}
    if(Character.toString(ch).equals("è")){sb.append("e");f=true;}
    if(Character.toString(ch).equals("Â")){sb.append("A");f=true;}
    if(Character.toString(ch).equals("ä")){sb.append("a");f=true;}
    if(Character.toString(ch).equals("ß")){sb.append("ss");f=true;}
    if(Character.toString(ch).equals("Ç")){sb.append("C");f=true;}
    if(Character.toString(ch).equals("Ö")){sb.append("O");f=true;}
    if(Character.toString(ch).equals("º")){sb.append("");f=true;}
    if(Character.toString(ch).equals("Ó")){sb.append("O");f=true;}
    if(Character.toString(ch).equals("ª")){sb.append("");f=true;}
    if(Character.toString(ch).equals("º")){sb.append("");f=true;}
    if(Character.toString(ch).equals("Ñ")){sb.append("N");f=true;}
    if(Character.toString(ch).equals("É")){sb.append("E");f=true;}
    if(Character.toString(ch).equals("Ä")){sb.append("A");f=true;}
    if(Character.toString(ch).equals("Å")){sb.append("A");f=true;}
    if(Character.toString(ch).equals("ä")){sb.append("a");f=true;}
    if(Character.toString(ch).equals("Ü")){sb.append("U");f=true;}
    if(Character.toString(ch).equals("ö")){sb.append("o");f=true;}
    if(Character.toString(ch).equals("ü")){sb.append("u");f=true;}
    if(Character.toString(ch).equals("á")){sb.append("a");f=true;}
    if(Character.toString(ch).equals("Ó")){sb.append("O");f=true;}
    if(Character.toString(ch).equals("É")){sb.append("E");f=true;}
    if(!f){
     sb.append("?");
    }
   }
   ch = iterator.next();
  }
  return sb.toString();
 }
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top