История изменений
Исправление KivApple, (текущая версия) :
ИМХО, самое правильное решение - все строки считать закодированными в UTF-8/UTF-16 (то есть кодировка, которая покрывает все потребности, какой-нибудь CP1251 не подойдёт). В памяти программы. При чтении исходника компилятор автоматически всё переводит в правильную кодировку (исходник может быть в любой кодировке). Все функции стандартной библиотеки работают именно над этими строками.
Нужна работа с другими кодировками? У строки есть конструктор, принимающий массив байт и название кодировки. А ещё есть метод, принимающий название кодировки и возвращающий массив байт. С помощью первого конвертируешь байтики в строку, с помощью второго обратно.
Так сделано во всех нормальных фреймворках и языках, назови хоть одно исключение. Не... по причинам legacy некоторые штуки поддерживают 2 типа строк - в однобайтовой кодировке и юникодовые. Но это сугубо наследие (когда-то в языке были только однобайтовые строки и сейчас многое на это завязано). Если без этого можно обойтись, то реализуют лишь юникодовые строки.
И ты не ответил на мой вопрос. В какой кодировке будет результат сложения двух строк, одна из которых в CP1251, а другая в CP866?
И ты реально собираешься писать для каждой кодировки, которую знаешь, полный набор строковых функций? А ещё полный набор функции перекодирования из каждой кодировки в каждую (зависимость количества функций от количества кодировок квадратическая)?
Исправление KivApple, :
ИМХО, самое правильное решение - все строки считать закодированными в UTF-8/UTF-16 (то есть кодировка, которая покрывает все потребности, какой-нибудь CP1251 не подойдёт). В памяти программы. При чтении исходника компилятор автоматически всё переводит в правильную кодировку (исходник может быть в любой кодировке). Все функции стандартной библиотеки работают именно над этими строками.
Нужна работа с другими кодировками? У строки есть конструктор, принимающий массив байт и название кодировки. А ещё есть метод, принимающий название кодировки и возвращающий массив байт. С помощью первого конвертируешь байтики в строку, с помощью второго обратно.
Так сделано во всех нормальных фреймворках и языках, назови хоть одно исключение. Не... по причинам legacy некоторые штуки поддерживают 2 типа строк - в однобайтовой кодировке и юникодовые. Но это сугубо наследие (когда-то в языке были только однобайтовые строки и сейчас многое на это завязано). Если без этого можно обойтись, то реализуют лишь юникодовые строки.
И ты не ответил на мой вопрос. В какой кодировке будет результат сложения двух строк, одна из которых в CP1251, а другая в CP866?
Исправление KivApple, :
ИМХО, самое правильное решение - все строки считать закодированными в UTF-8/UTF-16 (то есть кодировка, которая покрывает все потребности, какой-нибудь CP1251 не подойдёт). В памяти программы. При чтении исходника компилятор автоматически всё переводит в правильную кодировку (исходник может быть в любой кодировке). Все функции стандартной библиотеки работают именно над этими строками.
Нужна работа с другими кодировками? У строки есть конструктор, принимающий массив байт и название кодировки. А ещё есть метод, принимающий название кодировки и возвращающий массив байт. С помощью первого конвертируешь байтики в строку, с помощью второго обратно.
Так сделано во всех нормальных фреймворках и языках, назови хоть одно исключение. Не... по причинам legacy некоторые штуки поддерживают 2 типа строк - в однобайтовой кодировке и юникодовые. Но это сугубо наследие (когда-то в языке были только однобайтовые строки и сейчас многое на это завязано). Если без этого можно обойтись, то реализуют лишь юникодовые строки.
Исходная версия KivApple, :
ИМХО, самое правильное решение - все строки считать закодированными в UTF-8/UTF-16 (то есть кодировка, которая покрывает все потребности, какой-нибудь CP1251 не подойдёт). В памяти программы. При чтении исходника компилятор автоматически всё переводит в правильную кодировку. Все функции стандартной библиотеки работают именно над этими строками.
Нужна работа с другими кодировками? У строки есть конструктор, принимающий массив байт и название кодировки. А ещё есть метод, принимающий название кодировки и возвращающий массив байт. С помощью первого конвертируешь байтики в строку, с помощью второго обратно.
Так сделано во всех нормальных фреймворках и языках, назови хоть одно исключение. Не... по причинам legacy некоторые штуки поддерживают 2 типа строк - в однобайтовой кодировке и юникодовые. Но это сугубо наследие (когда-то в языке были только однобайтовые строки и сейчас многое на это завязано). Если без этого можно обойтись, то реализуют лишь юникодовые строки.