Первой части Вашего вопроса (как получить байты) уже ответили другие: посмотрите в System.Text.Encoding
пространство имен.
я обращусь к Вашему последующему вопросу: почему необходимо выбрать кодирование? Почему Вы не можете получить это от самого строкового класса?
ответ находится в двух частях.
, В первую очередь, байты, используемые внутренне строковым классом , не имеют значения , и каждый раз, когда Вы предполагаете, что они делают Вы, вероятно, представляете ошибку.
, Если Ваша программа полностью в.Net мире тогда, Вы не должны волноваться о получении массивов байтов для строк вообще даже при отправке данных через сеть. Вместо этого используйте.Net Сериализацию для волнения о передаче данных. Вы больше не волнуетесь о фактических байтах: средство форматирования Сериализации делает это для Вас.
, С другой стороны, что, если Вы отправляете эти байты куда-нибудь, что Вы не можете гарантировать, вытянет в данных из.Net сериализованного потока? В этом случае определенно необходимо волноваться о кодировании, потому что, очевидно, эта внешняя система заботится. Таким образом, снова внутренние байты, используемые строкой, не имеют значения: необходимо выбрать кодирование, таким образом, можно быть явными об этом кодировании на принимающем конце, даже если это - то же кодирование, используемое внутренне.Net.
я понимаю, что в этом случае Вы могли бы предпочесть использовать фактические байты, сохраненные строковой переменной в памяти, если это возможно, с идеей, что это могло бы сохранить некоторую работу, создающую Ваш поток байтов. Однако я поместил его в Вас, это просто не важно по сравнению с проверкой, что Ваш вывод понят с другой стороны, и гарантировать, что Вы должны быть явными с Вашим кодированием. Кроме того, если Вы действительно хотите соответствовать своим внутренним байтам, можно уже просто выбрать Unicode
кодирование и получить ту производительность сбережения.
, Который приносит мне к второй части... выбирающей Unicode
, кодирование сообщение.Net для использования базовых байтов. Действительно необходимо выбрать это кодирование, потому что, когда некоторый новомодный Unicode - Плюс выходит.Net время выполнения должно быть свободно использовать эту более новую, лучшую модель кодирования, не повреждая программу. Но, в настоящий момент (и обозримое будущее), просто выбрав кодирование Unicode дает Вам, что Вы хотите.
также важно понять, что Ваша строка должна быть переписана для проводного соединения, и это включает, по крайней мере, некоторый перевод комбинации двоичных разрядов , даже когда Вы используете соответствие, кодирующее . Компьютер должен составлять вещи как Большой по сравнению с Прямым порядком байтов, сетевым порядком байтов, пакетированием, информацией о сессии, и т.д.
Вот небольшой пример:
import gtk
win = gtk.Window()
win.connect("destroy", gtk.main_quit)
btn = gtk.Button("test")
#make a gdk.color for red
map = btn.get_colormap()
color = map.alloc_color("red")
#copy the current style and replace the background
style = btn.get_style().copy()
style.bg[gtk.STATE_NORMAL] = color
#set the button's style to the one you created
btn.set_style(style)
win.add(btn)
win.show_all()
gtk.main()