Каковы лучшие практики для обработки строк Unicode в C#? [закрытый]

IIUC, учитывая, что имя выходного кадра данных равно df, что-то вроде этого:

import socket, struct

def ip2int(ip):
    """
    Convert an IP string to int
    """
    packedIP = socket.inet_aton(ip)
    return struct.unpack("!L", packedIP)[0]

df['ip_int'] = df.Ip.apply(ip2int)
df['range_sum']=df.groupby(['Code'])['Range'].transform('sum')
df[df.Code.duplicated(keep='last')]

               Ip  Range Code      ip_int  range_sum
 1  200.109.100.0   1024   RU  3362612224       2048
8
задан Vijesh VP 28 September 2008 в 17:49
поделиться

7 ответов

Следует иметь в виду, что строки C# являются sequnces Символа, элементов кода UTF-16. Они не кодовые точки Unicode. Некоторые unicode кодовые точки требуют двух Символов, и Вы не должны разделять строки между этими Символами.

Кроме того, unicode кодовые точки может объединиться для формирования единственного языка 'символ' - например, 'u' Символ, сопровождаемый umlat Символом. Таким образом, Вы не можете разделить строки между точками произвольного кода также.

В основном это - путаница проблем, где любая данная проблема может только на языках влияния практики, Вы не знаете.

12
ответ дан 5 December 2019 в 07:37
поделиться

C# (и .NET в целом) обрабатывают строки unicode прозрачно, и Вы не должны будете делать ничего специального, если для Вашего приложения не нужно в файлы чтения-записи с определенной кодировкой. В тех случаях можно преобразовать управляемые строки в массивы байтов кодирования по Вашему выбору при помощи классов в Системе. Текст. Пространство имен кодировки.

7
ответ дан 5 December 2019 в 07:37
поделиться

Только думайте о кодировании при чтении и записи потоков. Используйте TextReader и TextWriters, чтобы прочитать и записать текст в различной кодировке. Всегда используйте utf-8, если у Вас есть выбор.

Не запутывайтесь языками и культурами - это - абсолютно отдельный вопрос от unicode.

1
ответ дан 5 December 2019 в 07:37
поделиться

Система. Строка уже обработала unicode внутренне, таким образом, Вы застрахованы там. Лучшая практика должна была бы использовать Систему. Текст. Кодирование. UTF8Encoding при чтении и записи файлов. Это больше, чем просто читает/пишет файлы однако, что-либо, что потоковые данные включая сетевые соединения собираются зависеть от кодирования. При использовании WCF он собирается принять значение по умолчанию к UTF8 для большей части привязки (на самом деле, большинство не позволяет ASCII вообще).

UTF8 является хорошим выбором, потому что, в то время как он все еще поддерживает весь набор символов Unicode для большинства набора символов ASCII, он имеет подобие байта. Таким образом наивные приложения, которые не поддерживают Unicode, имеют некоторый шанс чтения/записи Ваших данных приложений. Те приложения только начнут перестать работать, когда Вы начнете использовать расширенные символы.

Система. Текст. Кодирование. Unicode запишет UTF-16, который является минимумом двух байтов за символ, делая его и больше и полностью несовместимым с ASCII. И Система. Текст. Кодирование. UTF32, как можно предположить, больше все еще. Я не уверен в реальном варианте использования UTF-16 и 32, но возможно они работают лучше, когда у Вас есть большие количества расширенных символов. Это - просто теория, но если это верно, затем японские/Китайские разработчики, делающие продукт, который будет использоваться, прежде всего, на тех языках, мог бы найти UTF-16/32 лучший выбор.

2
ответ дан 5 December 2019 в 07:37
поделиться

.NET имеет относительно хорошую поддержку i18n. Вы не должны действительно думать о unicode, что, хотя все строки .NET и встроенные строковые функции делают правильную вещь с unicode. Единственная вещь принять во внимание состоит в том что большинство строковых функций, например, DateTime. ToString (), используйте по умолчанию культуру потока, которая по умолчанию является культурой Windows. Можно указать другую культуру для форматирования или на текущем потоке или на каждом вызове метода.

Единственное время unicode является проблемой, при кодировании/декодировании строк к и от байтов.

0
ответ дан 5 December 2019 в 07:37
поделиться

Как упомянуто.NET представляет Unicode дескриптора в виде строки прозрачно. Помимо файлового ввода-вывода, другое соображение было бы на слое базы данных. SQL Server, например, различает VARCHAR (non-unicode) и NVARCHAR (который обрабатывает unicode). Также потребность обратить внимание на параметры хранимой процедуры.

0
ответ дан 5 December 2019 в 07:37
поделиться

Больше деталей может быть найдено на этом потоке:

http://discuss.joelonsoftware.com/default.asp?dotnet.12.189999.12

0
ответ дан 5 December 2019 в 07:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: