유니 코드 문자열 (특히 영어, 독일어, 스페인어 및 아랍어)을 하드웨어 장치에 읽고 쓸 필요가있는 소프트웨어 (C#)를 작성하려고합니다. 펌웨어 개발자는 자신의 코드가 각 문자열을 하나의 이진 파일에 고정 길이 바이트 배열로 저장하려고하므로 인덱스 (index * length = starting offset)를 사용하여 모든 문자열에 빠르게 액세스 할 수 있고 고정 길이 바이트 수를 읽을 수 있다고 알려줍니다). .NET은 내부적으로 유니 코드 코드 포인트의 수에 따라 기술적으로 가변 길이 인코딩이라고 생각하는 UTF-16 인코딩을 사용합니다. 영어, 독일어, 스페인어 모두 UTF-16을 사용하여 인코딩 할 때 2 바이트/문자를 사용하지만 아랍어에 대해서는 확실하지 않습니다. UTF-16으로 각각 3 바이트를 요구할 수있는 아랍어 문자가있을 수 있으며, 이는 펌웨어 개발자가 문자열을 고정 길이로 저장할 계획을 깬 것으로 보입니다.유니 코드 문자열의 고정 길이 저장을위한 적절한 인코딩?
먼저 UTF-8/UTF-16 인코딩의 가변 길이 특성에 대한 내 이해를 확인할 수 있습니까? 둘째, 많은 공간을 낭비 하겠지만 각 문자열을 고정 길이로 저장할 수있는 최상의 옵션은 UTF-32 (고정 크기, 각 문자는 4 바이트를 사용하여 표현됨)입니까? 감사!
문제가 발생하는지 잘 모르겠습니다. 인코딩 된 문자열이 고정 필드 길이를 초과하지 않는 한 가변 길이 인코딩을 사용하면 어떤 문제가 발생합니까? 문자열의 끝과 사용되지 않은 나머지 바이트 사이의 경계를 표시하는 방법에 동의해야하지만 고정 길이 인코딩을 사용하는 경우에도이 문제가 적용됩니다. – shambulator
또한 UTF-16은 문제가되지 않습니다. 위키에 따르면 대부분의 아랍어는 Basic Multilingual Plane에 적합합니다. 즉, 대부분의 경우 코드 포인트 당 하나의 16 비트 코드 단위를 사용할 수 있습니다. 실패하면 2 개의 코드 단위를 사용합니다 (총 4 바이트이지만 UTF-16에서는 3을 사용하지 않습니다). 아마 당신이 나타내는 데 필요한 범위 *를 정확히 아는 것이 가장 좋습니다.http://en.wikipedia.org/wiki/Arabic_script_in_Unicode – shambulator
유니 코드에는 고정 길이가 없습니다. utf8everywhere.org의 "길이"참조 –