문제

나는 문자열체

"여러 문자와 심지어 특별한 문자를"

UTF8Encoding utf8 = new UTF8Encoding();
ASCIIEncoding ascii = new ASCIIEncoding();

체 위해서로 변환할 문자열을 전송합니다.요청할 수 있습니다 누군가가 어떤 빛을 가져올 이 간단한 작업,그냥 나는 오후.

편집 1:무엇이 우리가 달성하기 위해 노력하고 있는 제거하기 와 같은 특수 문자를 사용하여 몇 가지의 특별한 윈도우 아포스트로피.코드는 게시 아래로 대답지 않을 것이 알아서 하지 않습니다.기본적으로

O'brian 이 될 것입 O?이 있습니다.여기서'하나의 특별 아포스트로피

도움이 되었습니까?

해결책

이에 대응하여 다른 질문처럼 보이는 삭제되었습니다....점도 의미합니다.

클래식 유니코드를 ASCII 문제.트릭을 찾을 수 있습니다. 그것이 일어나고 있습니다.

.순서 잘 작동합니코드,정 그것은 말 그것은 유니코드 으로 시작(또는 왼쪽에서 기본값).

guess 는 당신의 수신할 수 있습니다.그래서,아마 사용 ASCIIEncoder EncoderReplacementFallback 과 함께 문자열입니다.빈:

using System.Text;

string inputString = GetInput();
var encoder = ASCIIEncoding.GetEncoder();
encoder.Fallback = new EncoderReplacementFallback(string.Empty);

byte[] bAsciiString = encoder.GetBytes(inputString);

// Do something with bytes...
// can write to a file as is
File.WriteAllBytes(FILE_NAME, bAsciiString);
// or turn back into a "clean" string
string cleanString = ASCIIEncoding.GetString(bAsciiString); 
// since the offending bytes have been removed, can use default encoding as well
Assert.AreEqual(cleanString, Default.GetString(bAsciiString));

물론 옛날에,우리는 단지 반복만을 제거 chars 127 보다 큰...음,우리의 사람들을 미국에서 적어도 있습니다.;)

다른 팁

나는 그것을 알아낼 수 있었다. 누군가가 저를 위해 일한 코드 아래에서 알고 싶어하는 경우 :

ASCIIEncoding ascii = new ASCIIEncoding();
byte[] byteArray = Encoding.UTF8.GetBytes(sOriginal);
byte[] asciiArray = Encoding.Convert(Encoding.UTF8, Encoding.ASCII, byteArray);
string finalString = ascii.GetString(asciiArray);

더 간단한 방법이 있는지 알려주세요.

확장 방법을 좋아하는 사람에게는이 방법이 우리에게 트릭을 수행합니다.

using System.Text;

namespace System
{
    public static class StringExtension
    {
        private static readonly ASCIIEncoding asciiEncoding = new ASCIIEncoding();

        public static string ToAscii(this string dirty)
        {
            byte[] bytes = asciiEncoding.GetBytes(dirty);
            string clean = asciiEncoding.GetString(bytes);
            return clean;
        }
    }
}

(시스템 네임 스페이스로 모든 문자열에 대해 거의 자동으로 사용할 수 있습니다.)

위의 Mark의 답변 (및 Geo의 주석)을 바탕으로 문자열에서 모든 ASCII 예외 케이스를 제거하기위한 두 개의 라이너 버전을 만들었습니다. 이 답변을 검색하는 사람들에게 제공됩니다 (내가 한 것처럼).

using System.Text;

// Create encoder with a replacing encoder fallback
var encoder = ASCIIEncoding.GetEncoding("us-ascii", 
    new EncoderReplacementFallback(string.Empty), 
    new DecoderExceptionFallback());

string cleanString = encoder.GetString(encoder.GetBytes(dirtyString)); 

많은 인코딩에 사용 된 문자를 8 비트 표현하려면 도움이 될 수 있습니다.

변수를 변경해야합니다 Targetencoding 원하는 인코딩에.

Encoding targetEncoding = Encoding.GetEncoding(874); // Your target encoding
Encoding utf8 = Encoding.UTF8;

var stringBytes = utf8.GetBytes(Name);
var stringTargetBytes = Encoding.Convert(utf8, targetEncoding, stringBytes);
var ascii8BitRepresentAsCsString = Encoding.GetEncoding("Latin1").GetString(stringTargetBytes);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top