2011-03-02 5 views
5

C#에서 string의 기호를 어떻게 대체 할 수 있습니까? 이C#의 문자열에서 기호 바꾸기

입력 추천

: "�Click me."

출력 : "Click me.";

+7

처음에 어떻게 그런 상징을 얻었습니까? 인코딩을 포기한 것처럼 보입니다. 교체는 해결책이 아닙니다. 문제의 뿌리를 다루십시오.이 문자열을 얻는 방법을 고치고 죽은 것을 소생 시키려고하지 마십시오. –

+0

[인코딩/코드 페이지 문제] (http://www.joelonsoftware.com/articles/Unicode.html)와 유사합니다. –

+0

영숫자와 구두점을 제외한 모든 것을 제거하려고합니까? –

답변

7

간단한 해결책은 문자열에서 모든 비 ASCII 문자를 제거하는 것입니다. - 필요하지 않을 수 있습니다 여기에 정규식을 사용하여

로 언급하지만
string s = "�Click me."; 
s = Regex.Replace(s, @"[^\u0000-\u007F]", ""); 

,이 인코딩/코드 페이지 문제가 될 수 있습니다 : this question에서이 가능 할 수있는 몇 가지 방법 아마 것 간단한있는이있다 적절한 해결책.

편집 : 귀하의 의견을 바탕으로, 여기에 몇 가지 다른 패턴은 당신이 시도 할 수 있습니다 :

s = Regex.Replace(s, @"[^\u0020-\u007F]", ""); 

이 숫자를 제외한 모든 것을 제거

모든 비 ASCII 문자와 ASCII 제어 문자를 제거 ASCII 문자 :

+0

ASCII가 아닌 문자를 대체 한 후 XML을 쓰려고하면 "16 진수 값 0x05는 유효하지 않은 문자입니다" – Novice

+0

@Novice'0x05'는 ASCII 제어 문자입니다. 그것도 제거하고 싶다면, 내 대답에 게시 된 것 대신에 이것을 사용할 수 있습니다 :'s = Regex.Replace (s, @ "[^ \ u0020- \ u007F]", "");'. 어디에서 당신의 의견을 받고 있습니까? – Donut

+0

mysql 데이터베이스에서 입력을 받고 있습니다. 테이블의 필드 문자 집합이 "utf_8" – Novice

2
var output = input.Replace("�",""); 

Simples!

+1

그래,하지만' ' 당신이 화면에 무엇을 볼 수 있습니다, 실제 값은 아마도 다른 뭔가 그래서이 대체 가능성이 높지 않을 것입니다. –

+0

오, 완전히 대답했습니다. "C#에서 문자열의 기호를 어떻게 대체 할 수 있습니까?" – Jamiec

+0

@Darin Dimitrov : 분명히 생각을 제거하겠습니까? 어쨌든 * 어딘가에 * – Kurru

2

유니 코드 블록 이름도 사용할 수 있습니다.

source = Regex.Replace(source , @"\p{name}", ""); 

이름 목록은 this article.에서 찾을 수 있습니다. 귀하의 캐릭터가 어떤 블록에 속할지 확실하지 않습니다.