Как определить кодировку текстового файла в target-c? - PullRequest
4 голосов
/ 11 марта 2011

Я хочу знать кодировку текстового файла в target-c. Можете ли вы объяснить мне, как это узнать?

Ответы [ 2 ]

7 голосов
/ 11 марта 2011

Вы можете использовать stringWithContentsOfFile:usedEncoding:error:, который возвращает, помимо новой строки, кодировку, которая использовалась.

Я должен отметить, что это эвристический процесс по своей природе - не всегда возможно определить кодировку символов файла.

1 голос
/ 22 сентября 2015

В некоторых текстовых документах есть тарабарщина в моем проекте, поэтому мне нужно знать кодировку текстового файла, чтобы изменить его кодировку, чтобы человек мог ее прочитать.

Я нашел это: http://lists.w3.org/Archives/Public/www-validator/2002Aug/0084.html и используя OC для перезаписи кода, он может работать для меня:

    NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSString *sourceFilePath = [documentPath stringByAppendingPathComponent:@"fileName.txt"];
NSFileHandle *sourceFileHandle = [NSFileHandle fileHandleForReadingAtPath:sourceFilePath];
NSData *begainData = [sourceFileHandle readDataOfLength:3];

Byte *bytes = (Byte *)[begainData bytes];
if (bytes[0] == 0xff
    && bytes[1] == 0xfe
    && (begainData.length < 4
        || bytes[2] != 0
        || bytes[3] != 0
        )
    )
{
     NSLog(@"unicode");
}

if (bytes[0] == 0xfe
    && bytes[1] == 0xff
    )
     NSLog(@"BigEndianUnicode");

if (bytes[0] == 0xef && bytes[1] == 0xbb && bytes[2] == 0xbf)
    NSLog(@"UTF8");

if (bytes[0] == 0x2b && bytes[1] == 0x2f && bytes[2] == 0x76)
    NSLog(@"UTF7");

if (bytes[0] == 0xff && bytes[1] == 0xfe && bytes[2] == 0 && bytes[3] == 0)
    NSLog(@"UTF32");

if (begainData.length < 3)
    NSLog(@"ascii");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...