[DllImport("kernel32.dll")]
static extern int MultiByteToWideChar(uint CodePage, uint dwFlags, string
lpMultiByteStr, int cbMultiByte, [Out, MarshalAs(UnmanagedType.LPWStr)]
StringBuilder lpWideCharStr, int cchWideChar);
Alternative version
[DllImport("kernel32.dll")]
private static extern int MultiByteToWideChar(
uint CodePage,
uint dwFlags,
[MarshalAs(UnmanagedType.LPArray)] Byte[] lpMultiByteStr,
int cbMultiByte,
[Out, MarshalAs(UnmanagedType.LPArray)]
Byte[] lpWideCharStr,
int cchWideChar);
None.
None.
Please add some!
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
using Microsoft.SqlServer.Server;
using System.Data.SqlTypes;
namespace uniconv {
public class Multibyte {
[DllImport("kernel32.dll")]
private static extern int MultiByteToWideChar(
uint CodePage,
uint dwFlags,
//string lpMultiByteStr, //
[MarshalAs(UnmanagedType.LPArray)] Byte[] lpMultiByteStr,
int cbMultiByte,
[Out, MarshalAs(UnmanagedType.LPArray)]
Byte[] lpWideCharStr,
int cchWideChar);
public static string ToUnicode(uint codepage, Byte[] lpMultiByteStr) {
Byte[] lpWideCharStr = new Byte[2*lpMultiByteStr.Length];
MultiByteToWideChar(codepage, 0, lpMultiByteStr, lpMultiByteStr.Length, lpWideCharStr, 2*lpMultiByteStr.Length);
return System.Text.Encoding.Unicode.GetString(lpWideCharStr);
}
[SqlFunction]
public static SqlString ConvToUnicode(SqlInt32 codepage, SqlString multibyteString) {
byte[] b = (byte[])ConvToMultibyteArray(multibyteString);
return (SqlString)ToUnicode((uint)(int)codepage, b);
}
[SqlFunction]
public static SqlBinary ConvToMultibyteArray(SqlString multibyteString) {
byte[] result;
Char[] ch = ((string)multibyteString).ToCharArray();
if ((ch.Length > 4) && (ch[1] == (char)0x00) && (ch[3] == (char)0x00)) {
result = new byte[ch.Length / 2];
for (int i = 0; i < ch.Length / 2; i++) {
result[i] = (byte)ch[i * 2];
}
}
else {
result = new byte[ch.Length];
for (int i = 0; i < ch.Length; i++) {
result[i] = (byte)ch[i];
}
}
return (SqlBinary)result;
}
}
}
Do you know one? Please contribute it!