Здравствуйте.
ToCodePage1251("Русский текст"). Что должна возвращать такая функция?
Пример функции для преобразования данных в нужную кодовую страницу:
Код: Выделить всё
public string ToCodepage1251(string st)
{
byte[] bt = System.Text.Encoding.GetEncoding(1251).GetBytes(st);
System.Text.StringBuilder sb = new System.Text.StringBuilder();
for (int index = 0; index < bt.Length; index++)
{
sb.Append((char)bt[index]);
}
return sb.ToString();
}
Пример отчета с использованием данной функции смотрите в аттаче.
При написании в поле "код", например, такого выражения
Код: Выделить всё
{System.Text.Encoding.Unicode.GetBytes(AbonentInfo.Account)}
В штрих-код кодируется не соответствующий набор байт, а что-то одинаковое для всех строк и не зависящее от данных.
Правильно, прямое преобразование byte[] в string дает строку "System.Byte[]".
Поэтому и требуется вышеописанная функция.
Еще при дизайне на штрих-коде отображается одно (или ошибка), а в предпросмотре - другое.
Если на вход штрихкода подается выражение, то во время дизайна на штрихкоде отображается именно это выражение как строка текста, без вычисления. Вычисление выражения производится на этапе рендеринга отчета, и в превью штрихкод будет отображать уже значение выражения, т.е. требуемые данные
Кстати, что подразумевалось под "Все символы ASCII"?
Класс System.Text.Encoding.ASCII работает лишь с 7 битами. В то время как в режиме Byte должны быть доступны 8 бит (так называемый extended ASCII, одним из которых cp1251 и является).
Как все-таки кодировать символы с кодом больше 127?
Прямая работа с 8-битными кодировками в .Net не всегда удобна. Поэтому мы использовали следующий метод для передачи данных в штрихкод:
На вход штрихкода принимается string, уникодный, который может содержать любые подготовленные данные.
Внутри штрихкода стринг преобразуется в массив байтов, каждый символ преобразуется командой (byte)st[index].
Соответственно при записи данных в штрихкод в зависимости от типа входных данных получаются следующие варианты:
- латиница: передавать стринг как есть.
- байты: преобразовать в стринг, каждый байт преобразовать командой (char)byteArray[index].
- национальные символы: преобразовать в нужную 8-битную кодовую страницу, затем как с массивом байтов.
Спасибо.