2017-01-12 3 views
1

Программа довольно проста, она помогла мне получить все коды ascii, так как мой компьютер, похоже, не соответствует стандартам в сетях , Проблема, которую я нахожу, заключается в том, что выходы в файле и на cmd различаются. Мне нужно использовать символы окна для проекта, который печатает файл и на экране, и выход файла не имеет их, по-видимому. Выход(C) Программа, которая печатает все символы CP850 на экране и в файле имеет разные выходы

#define _CRT_SECURE_NO_WARNINGS 
#include <stdlib.h> 
#include <stdio.h> 
#include <clocale> 

FILE* ascii; 

void main() 
{ 
    ascii = fopen("D://temp//ascii.txt", "w"); 

    setlocale(LC_ALL, "Portuguese_Portugal.850"); 
    int columns = 0, i; 
    printf("\nTable ASCII - C%cdigos 32 a 127 \n\n", 162); 
    fprintf(ascii, "\nTable ASCII - C%cdigos 32 a 127 \n\n", 162); 
    for(i=32; i<=127; i++) 
    { 
     printf("%3d-%c ", i ,i); 
     fprintf(ascii, "%3d-%c ", i, i); 
     columns++; 
     if(columns==8) 
     { 
      columns = 0; 
      printf("\n"); 
      fprintf(ascii, "\n"); 
     } 
    } 
    printf("\n\n\n"); 
    printf("\nTable ASCII - C%cdigos 128 a 255\n\n", 162); 
    fprintf(ascii, "\n\n\n"); 
    fprintf(ascii, "\nTable ASCII - C%cdigos 128 a 255\n\n", 162); 
    for (i = 128; i <= 255; i++) 
    { 
     printf("%3d-%c ", i, i); 
     fprintf(ascii, "%3d-%c ", i, i); 
     columns++; 
     if (columns == 8) 
     { 
      columns = 0; 
      printf("\n"); 
      fprintf(ascii, "\n"); 
     } 
    } 
    printf("\n\n\n"); 
    fclose(ascii); 
    system("pause"); 
} 

экрана:

Table ASCII - Códigos 32 a 127 

32-  33-! 34-" 35-# 36-$ 37-% 38-& 39-' 
40-( 41-) 42-* 43-+ 44-, 45-- 46-. 47-/ 
48-0 49-1 50-2 51-3 52-4 53-5 54-6 55-7 
56-8 57-9 58-: 59-; 60-< 61-= 62-> 63-? 
[email protected] 65-A 66-B 67-C 68-D 69-E 70-F 71-G 
72-H 73-I 74-J 75-K 76-L 77-M 78-N 79-O 
80-P 81-Q 82-R 83-S 84-T 85-U 86-V 87-W 
88-X 89-Y 90-Z 91-[ 92-\ 93-] 94-^ 95-_ 
96-` 97-a 98-b 99-c 100-d 101-e 102-f 103-g 
104-h 105-i 106-j 107-k 108-l 109-m 110-n 111-o 
112-p 113-q 114-r 115-s 116-t 117-u 118-v 119-w 
120-x 121-y 122-z 123-{ 124-| 125-} 126-~ 127- 




Table ASCII - Códigos 128 a 255 

128-Ç 129-ü 130-é 131-â 132-ä 133-à 134-å 135-ç 
136-ê 137-ë 138-è 139-ï 140-î 141-ì 142-Ä 143-Å 
144-É 145-æ 146-Æ 147-ô 148-ö 149-ò 150-û 151-ù 
152-ÿ 153-Ö 154-Ü 155-ø 156-£ 157-Ø 158-× 159-ƒ 
160-á 161-í 162-ó 163-ú 164-ñ 165-Ñ 166-ª 167-º 
168-¿ 169-® 170-¬ 171-½ 172-¼ 173-¡ 174-« 175-» 
176-░ 177-▒ 178-▓ 179-│ 180-┤ 181-Á 182-Â 183-À 
184-© 185-╣ 186-║ 187-╗ 188-╝ 189-¢ 190-¥ 191-┐ 
192-└ 193-┴ 194-┬ 195-├ 196-─ 197-┼ 198-ã 199-Ã 
200-╚ 201-╔ 202-╩ 203-╦ 204-╠ 205-═ 206-╬ 207-¤ 
208-ð 209-Ð 210-Ê 211-Ë 212-È 213-ı 214-Í 215-Î 
216-Ï 217-┘ 218-┌ 219-█ 220-▄ 221-¦ 222-Ì 223-▀ 
224-Ó 225-ß 226-Ô 227-Ò 228-õ 229-Õ 230-µ 231-þ 
232-Þ 233-Ú 234-Û 235-Ù 236-ý 237-Ý 238-¯ 239-´ 
240-­ 241-± 242-‗ 243-¾ 244-¶ 245-§ 246-÷ 247-¸ 
248-° 249-¨ 250-· 251-¹ 252-³ 253-² 254-■ 255-  



Press any key to continue . . . 

выход файла:

Table ASCII - C¢digos 32 a 127 ã 

32-  33-! 34-" 35-# 36-$ 37-% 38-& 39-' 
40-( 41-) 42-* 43-+ 44-, 45-- 46-. 47-/ 
48-0 49-1 50-2 51-3 52-4 53-5 54-6 55-7 
56-8 57-9 58-: 59-; 60-< 61-= 62-> 63-? 
[email protected] 65-A 66-B 67-C 68-D 69-E 70-F 71-G 
72-H 73-I 74-J 75-K 76-L 77-M 78-N 79-O 
80-P 81-Q 82-R 83-S 84-T 85-U 86-V 87-W 
88-X 89-Y 90-Z 91-[ 92-\ 93-] 94-^ 95-_ 
96-` 97-a 98-b 99-c 100-d 101-e 102-f 103-g 
104-h 105-i 106-j 107-k 108-l 109-m 110-n 111-o 
112-p 113-q 114-r 115-s 116-t 117-u 118-v 119-w 
120-x 121-y 122-z 123-{ 124-| 125-} 126-~ 127- 




Table ASCII - C¢digos 128 a 255 

128-€ 129- 130-‚ 131-ƒ 132-„ 133-… 134-† 135-‡ 
136-ˆ 137-‰ 138-Š 139-‹ 140-Œ 141- 142-Ž 143- 
144- 145-‘ 146-’ 147-“ 148-” 149-• 150-– 151-— 
152-˜ 153-™ 154-š 155-› 156-œ 157- 158-ž 159-Ÿ 
160-  161-¡ 162-¢ 163-£ 164-¤ 165-¥ 166-¦ 167-§ 
168-¨ 169-© 170-ª 171-« 172-¬ 173-­ 174-® 175-¯ 
176-° 177-± 178-² 179-³ 180-´ 181-µ 182-¶ 183-· 
184-¸ 185-¹ 186-º 187-» 188-¼ 189-½ 190-¾ 191-¿ 
192-À 193-Á 194-Â 195-Ã 196-Ä 197-Å 198-Æ 199-Ç 
200-È 201-É 202-Ê 203-Ë 204-Ì 205-Í 206-Î 207-Ï 
208-Ð 209-Ñ 210-Ò 211-Ó 212-Ô 213-Õ 214-Ö 215-× 
216-Ø 217-Ù 218-Ú 219-Û 220-Ü 221-Ý 222-Þ 223-ß 
224-à 225-á 226-â 227-ã 228-ä 229-å 230-æ 231-ç 
232-è 233-é 234-ê 235-ë 236-ì 237-í 238-î 239-ï 
240-ð 241-ñ 242-ò 243-ó 244-ô 245-õ 246-ö 247-÷ 
248-ø 249-ù 250-ú 251-û 252-ü 253-ý 254-þ 255-ÿ 
+6

Программа (текстовый редактор?), которую вы использовали для просмотра файла, не знает, что она содержит текст, закодированный на кодовой странице 850. Это очень распространенный авария. Похоже, он догадался [кодовая страница 1252] (https://en.wikipedia.org/wiki/Windows-1252#Code_page_layout), поэтому он, вероятно, был текстовым редактором Windows. Внимательно писать текстовые файлы в utf8 с помощью спецификации, чтобы избежать такой потери. –

+0

добро пожаловать в темную яму кодировок –

+0

@HansPassant, если он всегда рассчитывает быть UTF-8, спецификация не нужна. – 0andriy

ответ

1

с кодированием вы должны смотреть на три аспекта:

  • где делает вход сотрудничества из? он указывает кодировку (явно или неявно по спецификации)? можете ли вы доверять этой информации? иначе вы проиграли и можете отменить проект
  • какой кодировка процесс, который вы используете на машине? Вы должны убедиться, что ваша программа придерживается этой кодировки, так что каждый вход преобразуется в эту кодировку.
  • какой кодировки вы выход? убедитесь, что получатель знает, что он должен ожидать (в качестве ввода)
+1

Существует некоторое взаимодействие между ними. Консольная программа, вероятно, использует библиотеку, которая запрашивает консоль, которая кодирует ее для ввода и вывода, и соответственно адаптирует обработку. «Отменить проект» немного экстремально, но он, безусловно, будет приостановлен, если люди не согласятся на эффективную связь и какая кодировка используется. –