Making a few tests with this package in the shell, is-zeroing seems to work fine and returns a boolean :
import chess
b=chess.Board()
b.push_san("Nf3")
Move.from_uci('g1f3')
b.push_san("Nc6")
Move.from_uci('b8c6')
b.push_san("Ne5")
Move.from_uci('f3e5')
m=chess.Move(42,36)
flag = b.is_zeroing(m)
print(flag)
True
m=chess.Move(49,41)
flag=b.is_zeroing(m)
print(flag)
True
m=chess.Move(42,32)
flag=b.is_zeroing(m)
print(flag)
False
print("Nc6-a5 is not a capture nor a pawn move : " + str(flag))
Nc6-a5 is not a capture nor a pawn move : False
Did you try with str(board.is_zeroing(node.move)) ?
To print both a string and a boolean in the same print, you need to turn the boolean intro a string.
By the way what version of python do you use? From searching a bit, it seems python 3+ already stores strings in UTF8 and doesn't have the unicode() function. So no idea how the unicode() function works. But if your program gives weird results for the is_zeroing function and if it's the same using str(), then you might have to look into the parameters you are sending to the is_zeroing() method (pseudo_legal move? board not corrupted?).