2014-01-09 115 views
1

我正在將一個程序作爲VB.net的一個複習,我想我可能會做一些事情,我必須做很多反正:將輸入字符串轉換爲UTF-16LE,然後轉換爲Base64。如何將字符串轉換爲UTF-16LE然後轉換爲Base64?

現在,在PHP中,我能做到這樣的:

<?php 
$heading1_utf8 = "string"; 
$heading1utf_16 = mb_convert_encoding($heading1_utf8,"UTF-16LE","UTF-8"); 
$head1base64 = base64_encode($heading1utf_16); 
echo $head1base64; 
?> 

甜和簡單。

...但在vb.net中,我無法弄清楚如何從

Dim strInput = inputBox.Text

將其轉換得到的字符串爲UTF-16LE(它必須是UTF-16LE)然後將結果字符串轉換爲Base64。

謝謝!

編輯:Gserg和Steven的代碼工作得很好,它有助於看到兩種轉換文本的方法:一種具有可指定編碼,另一種具有Unicode。史蒂芬的回答在這個時候更加完整,所以我會接受它。謝謝!

回答

2

不幸的是,.NET中的UTF-16LE被簡稱爲「Unicode」(代碼頁ID 1200)。因此,用於UTF-16LE的正確編碼對象是Encoding.Unicode。第一步是獲得的字符串的UTF-16LE表示一個字節數組,像這樣:

Dim bytes() As Byte = Encoding.Unicode.GetBytes(inputBox.Text) 

然後,您可以通過使用Convert類,這樣這些字節轉換爲Base64字符串:

Dim base64 As String = Convert.ToBase64String(bytes) 

Encoding類有幾種最常用的編碼對象的公共屬性(例如UnicodeUTF8UTF7)。但是,如果將來需要使用不太常見的編碼對象,則可以使用Encoding.GetEncoding方法得到它。該方法採用代碼頁ID或名稱。支持的代碼頁的列表可以在MSDN的this page表中找到。

1
Dim b = Text.Encoding.GetEncoding("UTF-16LE").GetBytes(inputBox.Text) 
Dim base64 = Convert.ToBase64String(b) 
+0

非常感謝!我不得不在第一行中包含'System.Text'部分,出於某種原因'Imports System.Text'不起作用。 換句話說,你只是讓我的一天更好。謝謝! –

相關問題