2012-12-20 1 views
-1

txt 편집기를 사용하여 일부 파일을 열면 인코딩 유형을 읽을 수 없으며 파일을 저장할 때 내 프로그램에서이 문자를 사용하고 싶습니다. C#의 경우 :C# 파일 인코딩 및 디코딩, 읽을 수 없음

BinaryWriter bw = new BinaryWriter(File.Create(path), Encoder.SOME_ENCODING); 

로드 후로드 할 때 디코딩하십시오. 그래서 어떤 인코딩을 사용해야합니까?

+2

모든 인코딩, 그래서 당신이 읽기 및 동일한 인코딩을 사용하여 작성한다. – Oded

+0

UTF-8과 같은 유니 코드 인코딩을 사용해야합니다. 그것은 오늘날 모든 언어에서 사용되는 모든 문자를 인코딩 할 수 있기 때문입니다. 그렇지 않으면 대상 인코딩에서 인코딩 할 수없는 문자 대신 파일에'?????????????????????????????????????????????????????????????????????????. – Esailija

+0

내가 잘못 읽은 것이 아니라면 (그리고 나는 잘 알고있을 것입니다.) 알 수없는 인코딩 파일로 시작한다는 느낌을 받았고 동일한 인코딩으로 읽고 다시 저장할 수 있도록 인코딩을 결정하려고합니다. (나는 근본적인 방법 일 수 있지만, 그 질문을 읽는 방법이다.) – Kevin

답변

3

나는 파일에 일부 문자열 예 : "달콤한"을 저장하려면 당신은 텍스트 편집에서 파일을 열 경우 같은 뭔가를해야만 볼 것이다 "nfgkdn의 @ {3!"

그냥 간단한 예 a.txt에서

Obfuscate("a.txt", "hello"); 
string orgstr = Deobfuscate("a.txt"); 

데이터 : Mj82NjU=

void Obfuscate(string fileName, string data) 
{ 
    var bytes = Encoding.UTF8.GetBytes(data); 
    for (int i = 0; i < bytes.Length; i++) bytes[i] ^= 0x5a; 
    File.WriteAllText(fileName,Convert.ToBase64String(bytes)); 
} 

string Deobfuscate(string fileName) 
{ 
    var bytes = Convert.FromBase64String(File.ReadAllText(fileName)); 
    for (int i = 0; i < bytes.Length; i++) bytes[i] ^= 0x5a; 
    return Encoding.UTF8.GetString(bytes); 
} 
+0

효과적인. 암호화되었지만 인코딩되지 않았습니다. 나는 이것이 사용자가 원했던 것과 정확히 일치 할 것이라고 생각한다. 뭔가 매우 신중해야하지만 ... 이것은 String DataType을 기반으로하며 어떤 큰 데이터에 대해서도 OutOfMemory 예외를 발생시킵니다. 작은 문자열에 대해서는 괜찮지 만 큰 saveFile에는 거의 쓸모가 없습니다. 나는 내 자신의 코드에서 비슷한 방법을 사용했고, 파일이 너무 커서 단일 문자열 객체에 맞지 않기 때문에 더 많은 메모리 센세이션 세그먼트를 사용하기 위해 다시 작성해야했습니다. – Nevyn

+1

@Nevyn a) 그것은'Encryption'이 아닙니다 (함수 이름이 암시 하듯이). b) 문자열의 크기가 OP의 주요 관심사라고 생각하지 않습니다. c) 방대한 양의 데이터를 처리하기 위해 답을 더 복잡하게 만들고 싶지는 않습니다. – I4V

+0

암호화 란 무엇인가요? 그러나 원본 텍스트의 알고리즘 전환 또는 대체. 나는 당신의 요점을 이해하고 있으며, 이러한 방법은 대부분의 데이터에 대해 완벽하게 작동합니다. 나는 이것을 실행하기를 원하는 데이터 블록이 클수록 더 많은 메모리를 사용하고 문자열 크기 제한을 맞추기가 더 쉽다는 것을 지적했다. – Nevyn

관련 문제