2011-10-03 4 views
5

Excel 스프레드 시트에서 검색 한 문자열에서 원하지 않는 문자를 대체하려고합니다. 오라클 데이터베이스가 WE8ISO8859P1 문자 집합을 사용하는 이유는 Excel에서 "유용하게"삽입하는 텍스트를 여러 문자로 정의하지 않기 때문입니다 (곱슬 따옴표, em 및 en 대시 등). 데이터베이스에 대한 제어권이 없으므로 또는 Excel 스프레드 시트가 작성되는 방법 문자를 다른 것으로 바꿔야합니다.Excel에서 읽은 문자열의 특정 유니 코드 문자 바꾸기

나는 이렇게 문자열로 셀 내용을 검색 : 비주얼 스튜디오의 텍스트 영상 효과의 문자열을보기

string s = xlRange.get_Range("A1", Missing.Value).Value2.ToString().Trim(); 

은 완전하고 정확하게 검색 할 텍스트를 보여줍니다. 다음으로 시도하고 (이 경우에는 오른쪽 곱슬 인용 기호) 바람직하지 않은 문자 중 하나를 대체 :

s = Regex.Replace(s, "\u0094", "\u0022"); 

을하지만 (텍스트 영상 효과는 여전히 존재로 보여줍니다) 아무것도하지 않는다. 대체하려는 문자가 실제로 거기에 있는지 확인하기 위해 시도했습니다.

bool a = s.Contains("\u0094"); 

그러나 false를 반환합니다. 그러나 :

bool b = s.Contains("”"); 

이 true를 반환합니다.

.NET의 문자열에 대한 약간의 이해는 UTF-16으로 인코딩 된 반면 Excel에서는 ANSI를 사용하고있는 것입니다. 그렇다면 Excel에서 나오는 텍스트의 인코딩을 변경해야한다는 의미입니까? 아니면 여기서 뭔가 잘못하고있는 것입니까? 모든 조언을 크게 주시면 감사하겠습니다. 나는 유니 코드와 인코딩에 관한 모든 기사를 읽고 다시 읽었지만 여전히 현명하지 않다.

답변

4

예 .net의 문자열은 UTF-16입니다.

제대로하고 있습니다. 아마 당신의 16 진수 수학이 틀립니다. 테스트 한 캐릭터가 "\u0094"이 아닙니다. (의미가 확실하지 않습니다.) 은 나를 위해 일한 다음 :

((int)"”"[0]).ToString("X") 반환 "201D"

"”" == "\u201D" 반환 true

"\u0094" == "" (오른쪽은 빈 문자열) false

로 보일 것이다 UTF-16 문자의 많은 반환을 텍스트 비주얼 라이저에 의한 빈 문자열이지만 표시 할 수없는 문자이거나 대리모의 일부일 수도 있습니다 (즉, 일부 문자는 "\UXXXXXXXX"이어야 함) n과 함께 (네 자릿수) "\uXXXX".). 이 영역에 대한 나의 지식은 매우 제한적이다.

참조 -에 Jon Skeet의 기사 :

+0

네, 맞습니다. 내 16 진수 값이 떨어졌습니다. UTF-16 대신 WIN1252 문자 세트에 대한 코드 포인트를 사용하고 있습니다. 언젠가는이 모든 것을 이해하게 될 것입니다 (이 때 이해하기 어려운 부분이 훨씬 더 복잡해집니다). 답변 해주셔서 감사합니다. –

2

당신은 그 문자를 수용하는 데 필요한 열의 NVARCHAR 및 NTEXT 대신 VARCHAR 및 TEXT를 사용할 수 있습니다 . 그런 식으로 전체 데이터베이스를 변환 할 필요가 없으며 열이 유니 코드이므로 미래의 증거가됩니다.

+0

예, 이상적이지만, 슬프게도 데이터베이스를 제어 할 수 없습니다. –

+0

@SidHolland 도움이 필요하십니까? :) http://stackoverflow.com/questions/36393449/special-characters-in-oracle-nclob –