2008-09-19 2 views
2

ASCII 특수 문자 (예 : ASCII 값 0x01)를 문자열에 삽입하려면 어떻게해야합니까? 나는 다음과 같은 사용하고 있기 때문에C# 문자열 ASCII 표현

내가 물어 :

str.Replace("<TAG1>", Convert.ToChar(0x01).ToString()); 

을 나는 이것보다 더 좋은 방법이 있어야한다고 생각. 어떤 아이디어?

업데이트 :

나는이 방법을 사용하는 경우 또한, 나는 유니 코드 & ASCII가 충돌에 대해 걱정할 필요합니까?

답변

6

나는 \uXXXX을 사용하여 지정된 코드를 문자열에 삽입 할 수 있다고 생각합니다.

출시일 : 방금 테스트를 거쳐 작동합니다. 나는이 방법을 사용하는 경우

using System; 
class Uxxxx { 
    public static void Main() { 
     Console.WriteLine("\u20AC"); 
    } 
} 
+0

'\ u'다음의 16 진수 값은 ASCII 문자를 나타 냅니까? –

+0

숫자가 0x80보다 작 으면됩니다. –

1

또한, 나는 유니 코드 & ASCII의 충돌하는 걱정 :-) 필요합니까?

첫 번째 문제는 태그가 ASCII와 충돌하는 것입니다. TAG10에 도달하면 0x0A : 줄 바꿈과 충돌합니다. 태그를 9 개 이상 얻지 못할 것이라면 안전해야합니다. 유니 코드 인코딩 (또는 오히려 : UTF8)은 바이트 값이 0에서 127 사이 일 때 ASCII 인코딩과 동일합니다. 최상위 비트가 설정 될 때만 다릅니다.

1

나는 이보다 더 좋은 이어야한다고 느낍니다. 어떤 아이디어?

텍스트 도구을 사용하여 바이너리 청크를 조작하는 것처럼 보입니다. 예를 들어, 0x01 바이트를 삽입하려는 경우 더 이상 텍스트를 조작하지 않습니다. 일 수도 있고, 일 수도 있고, 어떤 인코딩을 신경 쓰지 않아도 상관 없으므로 출력하고있다.

더 나은 방법은 다루는 데이터를 이진 데이터로 처리하는 것입니다.이 방법은 취할 수있는 해결 방법을 사용하거나 부작용을 걱정하지 않고 비트와 바이트를 쉽게 삽입 할 수있게 해줍니다.

+0

'\ u0001'은 유효한 유니 코드 코드 포인트입니다. 텍스트/이진은 의미론의 문제입니다. – Sebastian

+0

@SebastianGodelet, 그렇지 않습니다. 유니 코드 코드 포인트는 유니 코드 변환 형식으로 바이트에만 매핑됩니다. 위의 예에서 유니 코드 코드 포인트 u + 0001은 * 일부 변환 형식의 바이트 0x01로 표시됩니다. 따라서 기술적으로 바이너리 덩어리를 조작 할 때 코드 포인트와 변환 포맷의 조합을 삽입 할 바이너리 시퀀스에 매핑할지 결정할 수 있습니다 (이러한 조합이있는 경우). 거의 의미가 없습니다. :) – bzlm

+0

잘하지만 OP가 이미 문자열에서 작동 중입니다. 그래서 그는 바이너리 데이터를 시작하기 위해 문자열에 넣지 않아야한다. .NET 문자열은 UTF-16을 사용하므로 \ u0001은 매우 동일한 ASCII 제어 문자를 설명하는 유효한 바이트 시퀀스입니다. – Sebastian