diff --git a/runtime/doc/builtin.txt b/runtime/doc/builtin.txt
index 9d56f50..d60d61f 100644
--- a/runtime/doc/builtin.txt
+++ b/runtime/doc/builtin.txt
@@ -72,7 +72,7 @@
 bindtextdomain({package}, {path})
 				Bool	bind text domain to specified path
 blob2list({blob})		List	convert {blob} into a list of numbers
-blob2str({blob} [, {options}])	String	convert {blob} into a String
+blob2str({blob} [, {options}])	String	convert {blob} into a list of strings
 browse({save}, {title}, {initdir}, {default})
 				String	put up a file requester
 browsedir({title}, {initdir})	String	put up a directory requester
@@ -610,8 +610,8 @@
 sqrt({expr})			Float	square root of {expr}
 srand([{expr}])			List	get seed for |rand()|
 state([{what}])			String	current state of Vim
-str2blob({string} [, {options}])
-				Blob	convert {string} into a Blob
+str2blob({list} [, {options}])
+				Blob	convert list of strings into a Blob
 str2float({expr} [, {quoted}])	Float	convert String to Float
 str2list({expr} [, {utf8}])	List	convert each character of {expr} to
 					ASCII/UTF-8 value
@@ -1260,7 +1260,7 @@
 		    " Encode the contents of a binary file
 		    echo base64_encode(readblob('somefile.bin'))
 		    " Encode a string
-		    echo base64_encode(str2blob(somestr))
+		    echo base64_encode(str2blob([somestr]))
 <
 		Can also be used as a |method|: >
 			GetBinaryData()->base64_encode()
@@ -1294,8 +1294,12 @@
 
 
 blob2str({blob} [, {options}])				*blob2str()*
-		Return a String in the current 'encoding' by converting the
-		bytes in {blob} into characters.
+		Return a List of Strings in the current 'encoding' by
+		converting the bytes in {blob} into characters.
+
+		Each <NL> byte in the blob is interpreted as the end of a
+		string and a new list item is added.  Each <NUL> byte in the
+		blob is converted into a <NL> character.
 
 		If {options} is not supplied, the current 'encoding' value is
 		used to decode the bytes in {blob}.
@@ -1306,22 +1310,22 @@
 				encoding.  The value is a |String|.  See
 				|encoding-names| for the supported values.
 							*E1515*
-		An error is given and an empty string is returned if
+		An error is given and an empty List is returned if
 		an invalid byte sequence is encountered in {blob},
 
-		Returns an empty String if blob is empty.
+		Returns an empty List if blob is empty.
 
 		See also |str2blob()|
 
 		Examples: >
-			blob2str(0z6162)	returns "ab"
-			blob2str(0zC2ABC2BB)	returns "«»"
-			blob2str(0zABBB, {'encoding': 'latin1'})  returns "«»"
+			blob2str(0z6162)	returns ["ab"]
+			blob2str(0zC2ABC2BB)	returns ["«»"]
+			blob2str(0zABBB, {'encoding': 'latin1'}) returns ["«»"]
 <
 		Can also be used as a |method|: >
 			GetBlob()->blob2str()
 <
-		Return type: |String|
+		Return type: list<string>
 
 
 							*browse()*
@@ -10592,33 +10596,39 @@
 		Return type: |String|
 
 
-str2blob({string} [, {options}])				*str2blob()*
-		Return a Blob by converting the characters in {string} into
-		bytes.
+str2blob({list} [, {options}])					*str2blob()*
+		Return a Blob by converting the characters in the List of
+		strings in {list} into bytes.
+
+		A <NL> byte is added to the blob after each list item.  A
+		newline character in the string is translated into a <NUL>
+		byte in the blob.
 
 		If {options} is not supplied, the current 'encoding' value is
-		used to convert the characters in {string} into bytes.
+		used to convert the characters into bytes.
 
 		The argument {options} is a |Dict| and supports the following
 		items:
-		    encoding	Encode the characters in {string} using this
-				encoding.  The value is a |String|.  See
-				|encoding-names| for the supported values.
+		    encoding	Encode the characters using this encoding.
+				The value is a |String|.  See |encoding-names|
+				for the supported values.
 
 		An error is given and an empty blob is returned if the
 		character encoding fails.
 
-		Returns an empty Blob if {string} is empty.
+		Returns an empty Blob if {list} is empty.
 
 		See also |blob2str()|
 
 		Examples: >
-			str2blob("ab")		returns 0z6162
-			str2blob("«»")		returns 0zC2ABC2BB
-			str2blob("«»", {'encoding': 'latin1'})	returns 0zABBB
+		    str2blob(["ab"])	returns 0z6162
+		    str2blob(["«»"])	returns 0zC2ABC2BB
+		    str2blob(["a\nb"])	returns 0z610A62
+		    str2blob(readfile('myfile.txt'))
+		    str2blob(["«»"], {'encoding': 'latin1'}) returns 0zABBB
 <
 		Can also be used as a |method|: >
-			GetStr()->str2blob()
+			GetListOfStrings()->str2blob()
 <
 		Return type: |Blob|
 
diff --git a/runtime/doc/usr_41.txt b/runtime/doc/usr_41.txt
index cb42257..35aba02 100644
--- a/runtime/doc/usr_41.txt
+++ b/runtime/doc/usr_41.txt
@@ -1,4 +1,4 @@
-*usr_41.txt*	For Vim version 9.1.  Last change: 2025 Jan 14
+*usr_41.txt*	For Vim version 9.1.  Last change: 2025 Jan 16
 
 		     VIM USER MANUAL - by Bram Moolenaar
 
@@ -801,8 +801,8 @@
 	trim()			trim characters from a string
 	bindtextdomain()	set message lookup translation base path
 	gettext()		lookup message translation
-	str2blob()		convert a string into a blob
-	blob2str()		convert a blob into a string
+	str2blob()		convert a list of strings into a blob
+	blob2str()		convert a blob into a list of strings
 
 List manipulation:					*list-functions*
 	get()			get an item without error for wrong index
diff --git a/runtime/doc/version9.txt b/runtime/doc/version9.txt
index cae2876..ecdb555 100644
--- a/runtime/doc/version9.txt
+++ b/runtime/doc/version9.txt
@@ -1,4 +1,4 @@
-*version9.txt*  For Vim version 9.1.  Last change: 2025 Jan 14
+*version9.txt*  For Vim version 9.1.  Last change: 2025 Jan 16
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -41638,7 +41638,7 @@
 
 |base64_decode()|	decode a base64 string into a blob
 |base64_encode()|	encode a blob into a base64 string
-|blob2str()|		convert a blob into a string
+|blob2str()|		convert a blob into a List of strings
 |bindtextdomain()|	set message lookup translation base path
 |diff()|		diff two Lists of strings
 |filecopy()|		copy a file {from} to {to}
@@ -41654,7 +41654,7 @@
 |matchbufline()|	all the matches of a pattern in a buffer
 |matchstrlist()|	all the matches of a pattern in a List of strings
 |popup_setbuf()|	switch to a different buffer in a popup
-|str2blob()|		convert a string into a blob
+|str2blob()|		convert a List of strings into a blob
 
 
 Autocommands: ~
